2011-10-03 30 views
1

在我的MVC應用程序,我想行爲以前在<httpHandlers>在web.config中規定,即如果我註冊這樣的處理程序:如何使用約束以外的動詞進行MVC丟棄請求?

<system.webServer> 
    <handlers> 
     <add name="processData" verb="POST" path="processData" type="RightType, RightAssembly"/> 
    </handlers> 
</system.webServer> 

則具有比「POST」等動詞來/processData所有請求導致HTTP 404

我試圖註冊這樣的路線:

routes.MapRoute(
    @"ProcessData", @"processData", 
    new { controller = @"Api", action = @"ProcessData" }, 
    new { httpMethod = new HttpMethodConstraint("POST") }); 

,現在一次請求具有比其他POST動詞的路由不匹配,可熔酚醛樹脂路線ution落入並進入默認頁面。

一旦路徑匹配但動詞不匹配,我該如何讓MVC生成HTTP錯誤消息(代碼404或類似的東西)?

回答

2

您可以使用您不想要的動詞註冊另一條路線,並將其導向NotFound動作。

0

路由以指定的順序按照以下路由工作,直到找到匹配的路由。通過添加約束條件,您可以使此路線失敗,因此它沿着列表向下找到下一個匹配路線(您的默認路線)。

要獲得您想要的行爲,您需要讓您的路線捕捉請求並處理錯誤。

採取約束出來的路線和控制器上執行以下操作:

[HttpPost] 
public ActionResult processData(myModel myPostedModel) 
{ 
    DoStuff(); 
    Return View(); 
} 

public ActionResult processData() 
{ 
    throw new HttpException(404); 
} 

我假設你做的模型綁定在你的操作方法在這裏,因爲你確實需要不同的方法簽名。如果沒有,那麼你需要取消HttpPost屬性並在那裏測試請求方法。