.NET Framework 4.6.2 无法命中 POST 端点

Posted

技术标签:

【中文标题】.NET Framework 4.6.2 无法命中 POST 端点【英文标题】:.NET Framework 4.6.2 Unable to hit POST endpoint 【发布时间】: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 配置路由的位置 【参考方案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

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

【讨论】:

以上是关于.NET Framework 4.6.2 无法命中 POST 端点的主要内容,如果未能解决你的问题,请参考以下文章

Grid 控件的 RenderSize 在 Windows 10 [.NET Framework 4.6.2] 和 Windows 7[.NET Framework 4] 中有所不同

.net framework(4.6.2) 迁移 .net core(2.2) 总结

在 4.6.2 Framework 中部署 .NET Standard 程序集 (Microsoft.AspNetCore.SignalR.Client)

.Net Framework 4.6.1 不默认为 TLS 1.2

ASP.NET Framework 4.6.2 SignalR 和 Redis 背板未连接

解决VS2013调试ASP.NET中无法调试的问题:当前不会命中断点。在 XXXX.dll 中找到了 XXX.cs 的副本,但是当前源代码与 XXXX.dll 中内置的版本不同。