C# ASP.Net WebApi使用操作名称更改此默认请求方法映射
我正在创建一个名为Customer的新Web API控制器。 此控制器有一个名为“创建”的操作 我无法通过“获取”HTTP请求请求此操作 以这种形式 除此方法外:C# ASP.Net WebApi使用操作名称更改此默认请求方法映射,c#,asp.net-web-api,asp.net-web-api-routing,C#,Asp.net Web Api,Asp.net Web Api Routing,我正在创建一个名为Customer的新Web API控制器。 此控制器有一个名为“创建”的操作 我无法通过“获取”HTTP请求请求此操作 以这种形式 除此方法外: public class CustomerController : ApiController { [System.Web.Mvc.AcceptVerbs("GET", "POST")] [System.Web.Mvc.HttpGet] [ActionName("Create")] public MI
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" };
}
}
公共类CustomerController:ApicController
{
[System.Web.Mvc.AcceptVerbs(“GET”、“POST”)]
[System.Web.Mvc.HttpGet]
[ActionName(“创建”)]
公共MISApiResult GetCreate(字符串用户ID、字符串密码)
{
返回新的misapireult(){Result=new List(){new Branch(){ID=Guid.NewGuid(),Name=“Branch1”},ResultCode=1,ResultMessage=“suces”};
}
}
是否有其他解决方案将操作名称保留为“Create”作为next
公共类CustomerController:ApicController
{
[System.Web.Mvc.AcceptVerbs(“GET”、“POST”)]
[System.Web.Mvc.HttpGet]
公共MISApiResult创建(字符串用户ID、字符串密码)
{
返回新的misapireult(){Result=new List(){new Branch(){ID=Guid.NewGuid(),Name=“Branch1”},ResultCode=1,ResultMessage=“suces”};
}
}
谢谢
编辑:
很抱歉第一次不清楚
根据这一回答:
根据操作名称,有一个默认的http方法,如果它以Get开头,它将被映射到Get http方法,否则它将被映射到POST
有没有一种方法可以使用自定义映射来更改此默认映射,这样我就可以将名为“Create”的操作映射到“GET”Http方法以进行测试,因为这种方法对于开发来说更快
我尝试放置HttpGet属性和AcceptVerbs(“GET”),但它仍然使用POST-Http方法映射操作
我找到了一种类似于我所说的方法,将action方法名称更改为GetCreate,然后将ActionName属性设置为“Create”值。
但是有没有办法更改默认映射
再次感谢。您可以使用自定义路由执行此操作:
[HttpGet]
[Route("customer/create")]
public MISApiResult<List<Branch>> Create(string userID, string password)
尽管我建议您遵循约定并使用适当的HTTP动词,但如果您正在创建客户,则按照约定,您应该使用POST请求端点api/客户。否则,您的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
}
进一步阅读:您可以在此操作前使用自定义路由:
[HttpGet]
[Route("customer/create")]
public MISApiResult<List<Branch>> Create(string userID, string password)
尽管我建议您遵循约定并使用适当的HTTP动词,但如果您正在创建客户,则按照约定,您应该使用POST请求端点api/客户。否则,您的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
}
进一步阅读:为什么不指定路线呢。您实际的问题是使用
System.Web.Mvc
改用“System.Web.Http”
using System.Web.Http;
[RoutePrefix("api/Customer")]
public class CustomerController : ApiController
{
[HttpGet]
[Route("Create")]
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" };
}
}
使用System.Web.Http;
[RoutePrefix(“api/客户”)]
公共类CustomerController:ApiController
{
[HttpGet]
[路线(“创建”)]
公共MISApiResult创建(字符串用户ID、字符串密码)
{
返回新的misapireult(){Result=new List(){new Branch(){ID=Guid.NewGuid(),Name=“Branch1”},ResultCode=1,ResultMessage=“suces”};
}
}
为什么不指定路线呢。您实际的问题是使用System.Web.Mvc
改用“System.Web.Http”
using System.Web.Http;
[RoutePrefix("api/Customer")]
public class CustomerController : ApiController
{
[HttpGet]
[Route("Create")]
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" };
}
}
使用System.Web.Http;
[RoutePrefix(“api/客户”)]
公共类CustomerController:ApiController
{
[HttpGet]
[路线(“创建”)]
公共MISApiResult创建(字符串用户ID、字符串密码)
{
返回新的misapireult(){Result=new List(){new Branch(){ID=Guid.NewGuid(),Name=“Branch1”},ResultCode=1,ResultMessage=“suces”};
}
}
您正在创建一个客户。它是如何得到请求的。它需要是一个post请求。您能告诉我们为什么需要创建为操作名称并获取为HttpMethod吗。?你有理由吗?在开发阶段测试动作URL会更快。我会在发布后把它改回POST。这是关于操作URL的权利,这就是为什么控制器有[RoutePrefix(“Customer”)]和[Route(“Create”)]的原因,还有,为什么您必须在同一个操作方法中接受GET和post。我认为这根本不是一个好的做法。您可以为两个分别获取和发布的操作方法使用相同的URL。在开发阶段也尝试做最佳实践。您的个人资料似乎有8年的经验。我从你的问题中找不到。你正在创造一个客户。它是如何得到请求的。它需要是一个post请求。您能告诉我们为什么需要创建为操作名称并获取为HttpMethod吗。?你有理由吗?在开发阶段测试动作URL会更快。我会在发布后把它改回POST。这是关于操作URL的权利,这就是为什么控制器有[RoutePrefix(“Customer”)]和[Route(“Create”)]的原因,还有,为什么您必须在同一个操作方法中接受GET和post。我认为这根本不是一个好的做法。您可以为两个分别获取和发布的操作方法使用相同的URL。在开发阶段也尝试做最佳实践。您的个人资料似乎有8年的经验。我从你的问题中找不到。