JavaScript 获取调用在调用 ASP.Net WebAPI 端点时返回空字符串

JavaScript fetch call returning empty string when calling ASP.Net WebAPI endpoint

我很困惑为什么我的 c# WebAPI 调用无法从 JavaScript 中获取并且总是只返回一个空字符串。

这是我在 C# API 控制器中的方法

    [AllowAnonymous]
    [Route("GetApiExample")]
    [HttpPost]
    public IHttpActionResult GetApiExample()
    {
        return Ok(new { success = true });
    }

这是我的 javascript

fetch('https://localhost:44363/api/Example/GetApiExample', {
  method: 'POST',
  mode: 'no-cors',
})
  .then((response) => response.text())
  .then((json) => console.log(json));

我假设它一定是 C# 方面的东西,或者事实是它需要 no-cors。

有人有什么想法吗?

** 更新 **

我已将答案更新如下,但这仍然返回一个空字符串

应该是object序列化参数,不是字符串。您的代码中还有 3 个“c”字母代表“succcess”。

 public IHttpActionResult GetApiExample()
 {    
     return Ok(new { success = true });
 }

更新:

mode: 'no-cors'

这并不完全允许来自浏览器的 cors 请求。浏览器将始终拒绝对其他域名的 http 请求,除非该目标域启用了 CORS。 'no-cors' 只是禁用检查跨域的选项。如果您在两个项目之间使用不同的端口号,则必须通过启用 CORS 在 api 项目上启用 Access-Control-Allow-Origin header。

您可以像这样对 post 请求使用 ajax。

$.ajax({
    type: 'POST',
    url: 'url',
    crossDomain: true,
    data: '{}',
    dataType: 'json',
    success: function(data, textStatus, jqXHR) {
        var value = data;
    },
    error: function (data, textStatus, errorThrown) {
        //Handle error
    }
});

最后的答案是服务器端没有正确开启CORS

我需要将以下内容添加到我的 WebApiConfig

var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);

完整代码是这样的...

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services
        // Configure Web API to use only bearer token authentication.
        config.SuppressDefaultHostAuthentication();
        config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

        // Web API routes
        config.MapHttpAttributeRoutes();

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


        var cors = new EnableCorsAttribute("*", "*", "*");
        config.EnableCors(cors);
    }
}

然后我的javascript删除模式:no-cors

fetch('https://localhost:44363/api/Example/GetApiExample', {
  method: 'POST',
})
  .then((response) => response.json())
  .then((json) => console.log(json));