【问题标题】:.NET Framework 4.6.2 Unable to hit POST endpoint.NET Framework 4.6.2 无法命中 POST 端点
【发布时间】:2021-03-27 21:19:16
【问题描述】:

我创建了一个 .NET Framework 4.6.2 WEB API,在我的 AuthController 中我创建了一个接受参数的测试端点。我无法达到这个端点。我得到的错误是: "MessageDetail": "在控制器 'Auth' 上找不到与名称 'Test' 匹配的操作。"

端点:

    [Route("api/auth")]
    [EnableCors(origins: "*", headers: "*", methods: "*")]
    public class AuthController : ApiController, IDisposable
    {
        [HttpPost]
        [Route("Test")]
        public HttpResponseMessage Test([FromBody] object response)
        {
           return Request.CreateResponse(HttpStatusCode.OK, "Success");
        }
     }

我的登录功能:

function LogIn() {

InputData = {
    UserName: $("#Login_UserName").val(),
    Password: $('#Login_Password').val()
};

console.log($("#Login_UserName").val());
console.log(InputData);

$.ajax({
    type: "post",
    url: 'https://localhost:44393' + '/api/auth/test',
    contentType: 'application/json',
    data: JSON.stringify(InputData),
    success: function (data) {
        HideSmokeLoader();
        console.log(data);
    },
    error: function (request) {
        console.log(request)
    }
});

}

【问题讨论】:

  • 错误是什么
  • 您能否也将您的WebApiConfig 代码发布到您使用.MapHttpRoute 配置路由的位置

标签: jquery .net asp.net-mvc api asp.net-web-api


【解决方案1】:

尝试将控制器中的 Route 属性更改为 RoutePrefix。 所以:

    [RoutePrefix("api/auth")]
    [EnableCors(origins: "*", headers: "*", methods: "*")]
    public class AuthController : ApiController, IDisposable

创建一个新项目并进行与您一样的设置。然后使用邮递员调用端点并得到相同的“未找到任何操作......”。 Route 属性是 Action 的完整路径 - 因此,如果您要调用 https://localhost:44393/Test,您将到达控制器。

【讨论】:

    【解决方案2】:

    像这样在 Action 本身上添加您的 Route -

    [EnableCors(origins: "*", headers: "*", methods: "*")]
    public class AuthController : ApiController, IDisposable
    {
        [HttpPost]
        [Route("api/auth/test")]
        public HttpResponseMessage Test([FromBody] object response)
        {
           return Request.CreateResponse(HttpStatusCode.OK, "Success");
        }
     }
    

    【讨论】:

      【解决方案3】:

      将 [Route("api/auth")] 更改为 [RoutePrefix("api/auth")] 因为 路由属性 放置在控制器或动作上以通过路由直接公开它。当放置在控制器上时,它适用于没有任何 System.Web.Mvc.RouteAttribute 的操作。

      RoutePrefixAttribute

      使用适用于控制器内所有操作的路由前缀注释控制器。

      【讨论】:

        猜你喜欢
        • 2018-01-07
        • 1970-01-01
        • 2020-04-04
        • 1970-01-01
        • 2017-01-07
        • 2019-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多