【问题标题】:Why the same POST request works in POSTMAN but not in browser AJAX (404 Not Found)?为什么相同的 POST 请求在 POSTMAN 中有效,但在浏览器 AJAX 中无效(404 Not Found)?
【发布时间】:2018-06-12 06:46:39
【问题描述】:

我使用以下 POST 方法创建了 ASP.NET WebAPI:

[HttpPost, Route("")]
public IHttpActionResult Post([FromBody] StudentDto student)
{
    if (!ModelState.IsValid)
        return BadRequest(ModelState);

    var maxId = conrollerStudents.Max(x => x.ID);
    student.ID = ++maxId;
    conrollerStudents.Add(student);

    InsertStudentIntoDatabase(student);

    return CreatedAtRoute("GetStudent", new { id = student.ID }, student);
}

WebAPI 的配置:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.EnableCors();

        config.MapHttpAttributeRoutes();  
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

此 API 方法仅适用于 POSTMAN,因为 POST 请求我得到了 201。当我使用以下代码(由 POSTMAN 自动生成)将此请求移动到 JavaScript-Jquery-AJAX 中时。我收到以下错误消息:

{
    "Message":"No HTTP resource was found that matches the request URI 'http://localhost:59523/api/students'.",
    "MessageDetail":"No action was found on the controller 'Students' that matches the request."
}

这是自动生成的 JavaScript-Jquery-AJAX 代码,碰巧不起作用:

// ...
var settings = {
    "async": true,
    "crossDomain": true,
    "url": "http://localhost:59523/api/students",
    "method": "POST",
    "headers": {
        "content-type": "application/json"
    },
    "processData": false,
    "data": "{\n  \"FirstName\": \"Sample\",\n  \"LastName\": \"Sample\",\n  \"City\": \"Sample\",\n  \"ListOfCourses\": []\n}"
};

$.ajax(settings).done(function (response) {
    console.log(response);
});
// ...

知道为什么会这样吗?

【问题讨论】:

  • 你从哪里调用这个 AJAX ?
  • 由按钮点击事件触发。

标签: javascript c# jquery ajax asp.net-web-api


【解决方案1】:

您似乎希望该方法成为该控制器上的默认操作,尝试将默认操作设置为 Index 并将您的方法重命名为 Index。

defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }

【讨论】:

  • 它没有帮助。窗台 404。
  • 您能分享 Postman 请求的完整原始内容吗?
  • 这里是邮递员的截图。如果这是你要求的。 imgur.com/a/j307u
  • 你在邮递员中设置了一个我看不到的标题,请检查内容类型是否匹配
【解决方案2】:

此问题与不正确的 WebAPI 配置文件有关:Web.config。我已将 system.webServer 部分更改为:

<system.webServer>
  <handlers>
    <remove name="ExtensionlessUrlHandler-Integrated-4.0"/>
    <remove name="TRACEVerbHandler"/>
    <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH" modules="IsapiModule" 
          scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />      
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH" type="System.Web.Handlers.TransferRequestHandler" 
          preCondition="integratedMode,runtimeVersionv4.0" />
  </handlers>
  <httpProtocol>
    <customHeaders>
      <add name="Access-Control-Allow-Origin" value="*"/>
      <add name="Access-Control-Allow-Headers" value="Content-Type"/>
      <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS"/>
    </customHeaders>
  </httpProtocol>
</system.webServer>

【讨论】:

    猜你喜欢
    • 2020-07-31
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    • 2016-07-11
    • 1970-01-01
    • 2021-11-12
    • 2018-06-30
    • 2018-11-30
    相关资源
    最近更新 更多