2016-12-13 4 views
0

コントローラでPOST、PUT、およびDELETEの動詞を無効にする必要があります。私は現在、以下に示すようにMethodNotAllowedを返していますが、より良い方法が必要であると感じています。私は、Web APIのパイプラインに追加できるフィルタがあると思うが、私は何が必要か、どこでそれを行うのかは分からない。私は、コントローラ内の各禁止法のためHttpResponseMessageを返すようにコードを配置することなく、特定の動詞をブロックするにはどうすればよいASP.NET Web APIの動詞を無効にするには

public HttpResponseMessage Post([FromBody]string value) 
    { 
     return new HttpResponseMessage(HttpStatusCode.MethodNotAllowed); 
    } 

?ニースを持って、まだ適切なhttpステータスコードを返す。

+1

すべてのアクションを削除します。フレームワークは、要求に合ったアクションを見つけるために規約を使用します。あなたのコントローラーにこれらの動詞が定義されていますか? – Nkosi

答えて

0

ActionFilterAttribute

public class CustomAttribute: ActionFilterAttribute 
    { 
     public CustomAttribute() 
     { 

     } 

     public string AllowVerbs { get; set; } 

     public string DenyVerbs { get; set; } 

     public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext) 
     { 
      //get the verb 
      var verb = actionContext.Request.Method; 

      //check the verb based on AllowVerbs, DenyVerbs 

      //set your response here if not allowed 
      //actionContext.Response = response; 
     } 
    } 

を実装するには、次に

[Custom(DenyVerbs="PUT,POST,DELETE")] 
0

の代わりに使用すると、属性のルーティングのHTTPメソッドで許可されている動詞を定義することができます許可されていない動詞を無効にすると、あなたのコントローラーをマーク。

だけで、あなたの方法にPOSTを許可する方法の[httpPost]インフロントを定義するには

[httpPost] 
public HttpResponseMessage Post([FromBody]string value) 
{ 
    return new HttpResponseMessage(HttpStatusCode.MethodNotAllowed); 
} 

HTTPメソッドの異なる種類は、あなたがでそれらについてのほこりを読むことができる2

[HttpDelete] 
[HttpGet] 
[HttpHead] 
[HttpOptions] 
[HttpPatch] 
[HttpPost] 
[HttpPut] 

のWeb APIに組み込まこのHTTPメソッドセクションのlink

関連する問題