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));
我很困惑为什么我的 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));