System.Web.Http.HttpPut与System.Web.Mvc.HttpPut有什么区别?

8

System.Web.Http.HttpPutSystem.Web.Mvc.HttpPut有何不同?

在Web API项目中使用[HttpPut]会导致错误405 - 请求的资源不支持http方法“PUT”。


你的控制器是从 Controller 还是从 ApiController 继承来的? - Sergey Berezovskiy
从ApiController起 - SurangiT
2个回答

7
他们属于两个不同的框架。每个管道的流程都寻找属于其各自命名空间的特定属性。
各自框架的路由引擎不知道对方,因此如果在MVC操作中使用Web API属性,就好像根本没有属性一样,这就是遇到405错误的原因。
请确保在正确的控制器类型上使用正确的命名空间。如果文件中同时使用了两个命名空间,请通过调用[System.Web.Http.HttpPut]来明确Web API操作。
[System.Web.Http.HttpPut]
public IHttpActionResult Put([FromBody]MyModel model) { return Ok(); }

对于MVC操作,使用[System.Web.Mvc.HttpPut]

[System.Web.Mvc.HttpPut]
public ActionResult Put([FromBody]MyModel model) { return View(); }

谢谢回复。然而,当我使用 [HttpGet] 时,无论是 System.Web.Http.HttpGet 还是 System.Web.Mvc.HttpGet,都没有遇到任何错误,只有在 [HttpPut] 中出现了问题。 - SurangiT
请检查您的Web配置,确保允许使用PUT动词进行请求。 - Nkosi

0
如果您正在使用MVC系统应用程序,则应使用System.Mvc.HttpPut。这是正确的方法,因为MVC模式有许多需要MVC控件/方法的内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接