teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

具体的に今回の問題について追記した。

2015/10/13 08:43

投稿

eripong
eripong

スコア1546

answer CHANGED
@@ -7,6 +7,15 @@
7
7
  まず、POSTした後に、クエリストリングにAspxAutoDetectCookieSupport=1を付けて
8
8
  GETしているようなのは、sessionStateのcookielessがAutoDetectの場合に発生する様です。
9
9
 
10
+ 今回の場合、最初のPOSTは、以下に述べるセッションのための処理を行うために、
11
+ ASP.NETによって処理され、二番目に来るGETを関数TestPostに振り分けようとして、
12
+ POSTにしか対応していないのでエラー、ということだと思います。
13
+
14
+ 同じサイト内のページに埋め込んだJavascriptやChromeのRest Clientでうまくいったのは、
15
+ 既に今回のアプリケーションにアクセスしており、リクエストにクッキーが載っていたためではないかと
16
+ 予想しています。
17
+ (確認できれば、確認していただければと思います。)
18
+
10
19
  セッションIDをクッキーに保存するかURLに埋め込むかを決めるために、
11
20
  クッキーが使えるクライアントか、そうでないかを判定するために、
12
21
  AspxAutoDetectCookieSupport=1にリダイレクトしています。

2

リンクと、文章の流れを一部修正した。

2015/10/13 08:43

投稿

eripong
eripong

スコア1546

answer CHANGED
@@ -5,14 +5,15 @@
5
5
 
6
6
  ### 問題が発生する仕組みについて
7
7
  まず、POSTした後に、クエリストリングにAspxAutoDetectCookieSupport=1を付けて
8
- GETしているようなのは、sessionStatecookieless="AutoDetect"を指定していると発生する様です。
8
+ GETしているようなのは、sessionStatecookielessAutoDetectの場合に発生する様です。
9
9
 
10
+ セッションIDをクッキーに保存するかURLに埋め込むかを決めるために、
10
- クッキーが使えるクライアントならクッキーにセッションID保存し
11
+ クッキーが使えるクライアントか、そうでいか判定するために
11
- そうでなければURLにセッションIDを埋め込む処理を行うために、
12
12
  AspxAutoDetectCookieSupport=1にリダイレクトしています。
13
+ 以下のページに詳しい判定方法が載っています。
13
14
  [Understand How the ASP.NET Cookieless Feature Works](https://msdn.microsoft.com/en-us/library/aa479315.aspx)
14
15
 
15
- [SessionStateSection.Cookieless プロパティ](https://msdn.microsoft.com/ja-jp/library/system.web.configuration.sessionstatesection.cookieless(v=vs.110).aspx)を見ると、
16
+ また、[SessionStateSection.Cookieless プロパティ](https://msdn.microsoft.com/ja-jp/library/system.web.configuration.sessionstatesection.cookieless.aspx)を見ると、
16
17
  cookielessのデフォルトはAutoDetectの様なので、こちらをUseCookiesにすれば、
17
18
  現象が解消する可能性はあります。
18
19
  その場合、HttpClientでCookieが有効になる様にする必要があります。

1

詳細を追記した。

2015/10/13 08:33

投稿

eripong
eripong

スコア1546

answer CHANGED
@@ -1,4 +1,28 @@
1
1
  調べ切れていませんが、セッションの実現のための仕組みのようです。
2
2
  [rest - asp.net web api and aspxautodetectcookiesupport - Stack Overflow](http://stackoverflow.com/questions/29048822/asp-net-web-api-and-aspxautodetectcookiesupport)
3
3
  では、セッションをoffにする事で現象が解消したとありますが、
4
- セッションは使用されているでしょうか?offにすることはできますか?
4
+ セッションは使用されているでしょうか?offにすることはできますか?
5
+
6
+ ### 問題が発生する仕組みについて
7
+ まず、POSTした後に、クエリストリングにAspxAutoDetectCookieSupport=1を付けて
8
+ GETしているようなのは、sessionStateにcookieless="AutoDetect"を指定していると発生する様です。
9
+
10
+ クッキーが使えるクライアントならクッキーにセッションIDを保存し、
11
+ そうでなければURLにセッションIDを埋め込む処理を行うために、
12
+ AspxAutoDetectCookieSupport=1にリダイレクトしています。
13
+ [Understand How the ASP.NET Cookieless Feature Works](https://msdn.microsoft.com/en-us/library/aa479315.aspx)
14
+
15
+ [SessionStateSection.Cookieless プロパティ](https://msdn.microsoft.com/ja-jp/library/system.web.configuration.sessionstatesection.cookieless(v=vs.110).aspx)を見ると、
16
+ cookielessのデフォルトはAutoDetectの様なので、こちらをUseCookiesにすれば、
17
+ 現象が解消する可能性はあります。
18
+ その場合、HttpClientでCookieが有効になる様にする必要があります。
19
+ ただ、UseCookiesにすればリダイレクトがなくなるかどうかについては、
20
+ 今のところ有効な資料を見つけられておらず、また検証する環境もないので、
21
+ うまく行くかは未知数です。
22
+
23
+ UseUriは、セッションID付きのURLへのリダイレクトを伴うと思いますので、
24
+ いずれにしてもリダイレクトした場合にGETリクエストになって同じエラーになるかと思います。
25
+ (こちらも検証していないので予想です。)
26
+
27
+ セッション自体をなくしてしまえば、これらの仕組みが動かなくなるので、
28
+ セッションをoffにすれば改善するだろうと思って回答しました。