X-HTTP-Method
(又はX-HTTP-Method-Override
)ヘッダは、Web APIによって、ボックスの外にサポートされていません。
protected void Application_Start(object sender, EventArgs e)
{
GlobalConfiguration.Configuration.MessageHandlers.Add(new XHttpMethodDelegatingHandler());
...
}
:
public class XHttpMethodDelegatingHandler : DelegatingHandler
{
private static readonly string[] _allowedHttpMethods = { "PUT", "DELETE" };
private static readonly string _httpMethodHeader = "X-HTTP-Method";
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
if (request.Method == HttpMethod.Post && request.Headers.Contains(_httpMethodHeader))
{
string httpMethod = request.Headers.GetValues(_httpMethodHeader).FirstOrDefault();
if (_allowedHttpMethods.Contains(httpMethod, StringComparer.InvariantCultureIgnoreCase))
request.Method = new HttpMethod(httpMethod);
}
return base.SendAsync(request, cancellationToken);
}
}
は今、あなたは自分のDelegatingHandler
Global.asax
に登録する必要があります:あなたは(実装はあなたはそれがあるべきようPOST
方法であなたの要求を行っていることを前提としてい下回っ)カスタムDelegatingHandler
を作成する必要があります
これはトリックを行う必要があります。
コントローラでどのようにメソッドを定義しましたか?これをあなたの質問に表示すると、答えが得られます。メソッドで[HttpPut]属性を使用しましたか? –
私はちょうどそれをしました - [HttpPut] – nickthompson
実際、私はそれがX-HTTP-Methodヘッダーによって引き起こされていることを認識しました。私がWebRequestを使用し、 "メソッド"を "PUT"に設定すると、正常に動作します。だから私はもっと混乱している! – nickthompson