【发布时间】:2017-11-07 13:08:55
【问题描述】:
我正在创建一个名为 Customer 的新 Web API 控制器。 这个控制器有一个名为“创建”的动作
我无法通过“GET”HTTP 请求来请求此操作 以这种形式
http://ip:port/api/Customer/Create?userId=x&password=y
这种方法除外:
public class CustomerController : ApiController
{
[System.Web.Mvc.AcceptVerbs("GET", "POST")]
[System.Web.Mvc.HttpGet]
[ActionName("Create")]
public MISApiResult<List<Branch>> GetCreate(string userID, string password)
{
return new MISApiResult<List<Branch>>() { Result = new List<Branch>() { new Branch() { ID = Guid.NewGuid(), Name = "Branch1" } }, ResultCode = 1, ResultMessage = "Sucess" };
}
}
是否有任何其他解决方案可以将操作名称保留为“创建”作为下一个。
public class CustomerController : ApiController
{
[System.Web.Mvc.AcceptVerbs("GET", "POST")]
[System.Web.Mvc.HttpGet]
public MISApiResult<List<Branch>> Create(string userID, string password)
{
return new MISApiResult<List<Branch>>() { Result = new List<Branch>() { new Branch() { ID = Guid.NewGuid(), Name = "Branch1" } }, ResultCode = 1, ResultMessage = "Sucess" };
}
}
谢谢。
编辑:
很抱歉第一次没有说清楚。
根据这个答案:
How does a method in MVC WebApi map to an http verb?
根据动作名称有一个默认的http方法,如果以Get开头,则默认映射为GET HTTP方法,否则将映射为POST。
有没有一种方法可以使用自定义映射更改此默认映射,以便我可以使用“GET”Http 方法映射名为“Create”的操作以用于测试目的,因为这种方式对开发来说更快
我尝试将 HttpGet Attribute 和 AcceptVerbs("GET") 放入,它仍然使用 POST Http 方法映射操作。
我找到了一种方法,就像我说的那样,将操作方法名称更改为 GetCreate,然后将 ActionName 属性与“Create”值一起放入。 但是有没有办法改变默认映射?
再次感谢。
【问题讨论】:
-
您正在创建一个客户。如何获取请求。它需要是一个发布请求
-
你能告诉我们为什么你需要 Create as action Name name 和 Get as HttpMethod.?你有理由吗?
-
在开发阶段测试Action URL更快。稍后我会在它发布时将其改回 POST。
-
所以。它是关于正确的操作 URL,这就是为什么我们有控制器的 [RoutePrefix("Customer")] 和 [Route("Create")]
-
另外,为什么你必须同时接受 GET 和 post 以相同的操作方法。我认为这根本不是一个好习惯。对于分别获取和发布的两个操作方法,您可以拥有相同的 URL。尝试在开发阶段做最佳实践。您的个人资料似乎有 8 年的经验。我无法从你的问题中找到。
标签: c# asp.net-web-api asp.net-web-api-routing