1

HttpGetとHttpPostのリクエストに異なる方法で応答するWebサービスを作成しようとしています。

私はこれでHttpGetを有効にしました:

<webServices>
  <protocols>
    <add name="HttpGet"/>
  </protocols>
</webServices>

そして、2つの関数を作成しました。1つはHttpPostリクエストに対して起動する必要があり、もう1つはHttpGetで起動する必要があります。

[WebMethod]
[HttpPost]
[ActionName("HelloWorld")]
public string HelloWorldPost()
{
    return "Hello POST World";
}

[WebMethod]
[HttpGet]
public string HelloWorld()
{
    return "Hello GET World";
}

ただし、HttpGet、HttpPost、およびActionNameは完全に無視されるようです。HelloWorldへのすべてのリクエスト(投稿または取得)は、2番目の関数を起動します。これを他の方法で行う必要がありますか?私もこれで機能を制限しようとしました:

[ScriptMethod(UseHttpGet = false)]

しかし、それも違いはありませんでした。

4

2 に答える 2

2

考えがある。

手始めに、yorWebサービスのweb.configファイルは次のようになります。

<webServices>
  <protocols>
     <add name="HttpGet"/>
     <add name="HttpPost"/>
  </protocols>
</webServices>

次に、使用するフォームメソッドに関係なく、Webメソッドxを呼び出します。

[WebMethod]
public string X()
{
  //so, you detect which method is invoked by using 
  // HttpContext.Current.Request.HttpMethod
  if (HttpContext.Current.Request.HttpMethod == "POST") {
    //do something now you know it is post method
  }
  else {
    //now, it should be get method and you do something different
  }
//end of web method
}

私の主なポイントは、チェックHttpContext.Current.Request.HttpMethodし、使用されているメソッドに応じて、さまざまなメソッドを呼び出すことです。

于 2012-10-29T14:43:31.543 に答える
0

ASP.NET Webサービスアプリケーションは、期待に沿ったASP.NETMVCとは異なる動作をします。コードでは、Amiram Korachが指摘しているように、HttpGet/HttpPost属性とActionName属性の両方がMVCに属しています。これらの属性は、Webサービスアプリケーションとしてホストされている場合は無視されます。

Webサービスアプリケーションの「ルーティング」は、メソッド名(HelloWorldPostおよびHelloWorld)に基づいており、HTTPVERBには基づいていません。

POSTフローをトリガーするには、HelloWorldPost(service.asmx / HelloWorldPost)を呼び出す必要があります

于 2012-10-28T15:49:07.660 に答える