C# ASP.Net WebApi使用操作名称更改此默认请求方法映射

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

我正在创建一个名为Customer的新Web API控制器。 此控制器有一个名为“创建”的操作

我无法通过“获取”HTTP请求请求此操作 以这种形式

除此方法外:

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年的经验。我从你的问题中找不到。