ASP.Net Web API 基于 HTTP 方法的路由
ASP.Net Web API Route based on HTTP Method
有什么方法可以根据请求中指定的HTTP方法进行路由吗?我希望在同一个 URI 上有一个 GET 和 PUT,但我似乎找不到在两者之间设置路由的选项。 [HttpGet] 和 [HttpPut] 属性仅充当过滤器,因此 PUT 请求命中第一个操作并返回 405 错误,因为它首先命中 GEt 处理程序。
我想做什么
~/User/PP 获取 -> UserController.GetPrivacyPolicy
~/User/PP 放 -> UserController.UpdateUserPrivacyPolicy
当前情况
~/User/PP 获取 -> UserController.GetPrivacyPolicy
~/User/PP 放 -> UserController.GetPrivacyPolicy
(这个错误是因为我在 GetPrivacyPolicy 方法上有一个 [HttpGet] 过滤器)
更新:
只是恭维下面发布的内容,看来我误解了 [HttpGet] 和 [HttpPut] 属性的工作原理,它们是路由过程的一部分。我能够通过以下
达到我想要的结果
[HttpGet]
[Route("~/User/PP")]
public string GetPrivacyPolicy()
{
return "Get PP";
}
[HttpPut]
[Route("~/User/PP")]
public void UpdatePrivacyPolicy()
{
return "Put PP";
}
您需要做的是创建具有相同名称操作但装饰有不同 Http 方法属性的控制器
public class UserController : Controller {
[HttpGet]
public ActionResult PrivacyPolicy(int id) {
// Put your code for GetPrivacyPolicy here
}
[HttpPut]
public ActionResult PrivacyPolicy(int id, YourViewModel model) {
// Put your code for UpdatePrivacyPolicy here
}
}
当然还有其他方法的适当操作,例如HttpPost
, HttpDelete
, HttpPatch
.
有什么方法可以根据请求中指定的HTTP方法进行路由吗?我希望在同一个 URI 上有一个 GET 和 PUT,但我似乎找不到在两者之间设置路由的选项。 [HttpGet] 和 [HttpPut] 属性仅充当过滤器,因此 PUT 请求命中第一个操作并返回 405 错误,因为它首先命中 GEt 处理程序。
我想做什么
~/User/PP 获取 -> UserController.GetPrivacyPolicy
~/User/PP 放 -> UserController.UpdateUserPrivacyPolicy
当前情况
~/User/PP 获取 -> UserController.GetPrivacyPolicy
~/User/PP 放 -> UserController.GetPrivacyPolicy
(这个错误是因为我在 GetPrivacyPolicy 方法上有一个 [HttpGet] 过滤器)
更新: 只是恭维下面发布的内容,看来我误解了 [HttpGet] 和 [HttpPut] 属性的工作原理,它们是路由过程的一部分。我能够通过以下
达到我想要的结果 [HttpGet]
[Route("~/User/PP")]
public string GetPrivacyPolicy()
{
return "Get PP";
}
[HttpPut]
[Route("~/User/PP")]
public void UpdatePrivacyPolicy()
{
return "Put PP";
}
您需要做的是创建具有相同名称操作但装饰有不同 Http 方法属性的控制器
public class UserController : Controller {
[HttpGet]
public ActionResult PrivacyPolicy(int id) {
// Put your code for GetPrivacyPolicy here
}
[HttpPut]
public ActionResult PrivacyPolicy(int id, YourViewModel model) {
// Put your code for UpdatePrivacyPolicy here
}
}
当然还有其他方法的适当操作,例如HttpPost
, HttpDelete
, HttpPatch
.