在我的MVC应用程序中,我想要在web.config中<httpHandlers>
中先前指定的行为,即如果我注册这样的处理程序:
<system.webServer>
<handlers>
<add name="processData" verb="POST" path="processData" type="RightType, RightAssembly"/>
</handlers>
</system.webServer>
然后对/processData
的所有具有除“POST”之外的动词的请求都会导致HTTP 404。
我尝试注册这样的路线:
routes.MapRoute(
@"ProcessData", @"processData",
new { controller = @"Api", action = @"ProcessData" },
new { httpMethod = new HttpMethodConstraint( "POST" ) } );
现在一旦请求有POST以外的动词,路由不匹配,路由解析就会失败并进入默认页面。
一旦路径匹配但是动词不匹配,我如何让MVC产生HTTP错误消息(代码404或类似的东西)?
答案 0 :(得分:2)
您可以使用您不想要的动词注册另一条路线,并使其导致NotFound动作。
答案 1 :(得分:0)
路由按照指定的顺序执行路由,直到找到匹配的路由。通过添加约束,您可以使此路由失败,从而在列表中向下查找下一个匹配路由(默认值)。
要获得您想要的行为,您需要让路由捕获请求,然后处理错误。
将约束从路线中取出并在控制器上执行以下操作:
[HttpPost]
public ActionResult processData(myModel myPostedModel)
{
DoStuff();
Return View();
}
public ActionResult processData()
{
throw new HttpException(404);
}
我假设您在此处对您的操作方法进行模型绑定,因为您确实需要不同的方法签名。如果没有,那么你需要取消HttpPost属性并测试那里的请求方法。