【发布时间】:2020-08-15 02:34:25
【问题描述】:
我正在尝试从我的 Vue web 应用程序调用我的 C# web-api,但遇到以下错误:
Access to XMLHttpRequest at 'http://www.api.example.com/'
from origin 'http://www.example.com' has been blocked by CORS policy:
Response to preflight request doesn't pass access control check:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
以下代码 sn-p 显示了我如何使用 axios 调用 rest-api。
import axios from 'axios'
const client = axios.create({
baseURL: 'http://www.api.example.com',
json: true,
withCredentials: true
})
export default {
async execute(method, resource, data) {
return client({
method,
url: resource,
data,
headers: {}
}).then(req => {
return req
})
},
myFunc(data) {
return this.execute('post', '/', data)
}
}
带有POST请求方式的web-api如下:
[EnableCors("VueCorsPolicy")]
[Route("api/[controller]")]
[ApiController]
public class MyController : ControllerBase
{
[HttpPost]
public async Task<int> Post([FromBody] Data data)
{
// stuff
}
}
我还在 Startup.cs 文件中的“ConfigureServices”方法中添加了一个 CORS。
services.AddCors(options =>
{
options.AddPolicy("VueCorsPolicy", builder =>
{
builder
.WithOrigins("http://www.example.com")
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials();
});
});
最后我还在 Startup.cs 文件中添加了“配置”方法:
app.UseCors("VueCorsPolicy");
【问题讨论】: