我正在创建一个名为Customer的新Web API控制器。 这个Controller有一个名为“Create”的Action
我无法通过“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属性和AcceptVerbs(“GET”)放在一起,它仍然使用POST Http方法映射动作。
我找到了一种方式,就像我说的那样,将操作方法名称更改为GetCreate,然后将ActionName属性设置为“Create”值。 但有没有办法改变默认的映射?
再次感谢。
答案 0 :(得分:4)
您可以在此操作之前使用自定义路线:
[HttpGet]
[Route("customer/create")]
public MISApiResult<List<Branch>> Create(string userID, string password)
不要忘记在应用程序配置期间启用属性路由(这应该在默认路由定义之前添加):
config.MapHttpAttributeRoutes();
虽然我建议遵循约定并使用适当的HTTP谓词 - 如果您正在创建客户,那么按照惯例,您应该使用POST请求到端点 api / customers 。否则,您的API可能会让其他人感到困惑。
另外,我建议使用IHttpActionResult
作为方法的返回类型:
public IHttpActionResult Post(string userID, string password)
{
if (_userRepository.Exists(userID))
return BadRequest($"User with ID {userID} already exists");
_userRepository.Create(userID, password);
return StatusCode(HttpStatusCode.Created) // or CreatedAtRoute
}
答案 1 :(得分:1)
为什么不指定路线。您实际的问题是使用Uri androidPayUri = Uri.parse("https://www.android.com/payapp/savetoandroidpay/" + jwt);
Intent intent = new Intent(Intent.ACTION_VIEW, androidPayUri);
使用&#39; System.Web.Http&#39;代替
System.Web.Mvc