Я пытаюсь вызвать мой C# web-api из моего Vue веб-приложения, но я сталкиваюсь со следующей ошибкой:
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.
Следующий фрагмент кода показывает, как я звоню остальным -api с использованием axios
.
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)
}
}
Веб-API с методом запроса POST выглядит следующим образом:
[EnableCors("VueCorsPolicy")]
[Route("api/[controller]")]
[ApiController]
public class MyController : ControllerBase
{
[HttpPost]
public async Task<int> Post([FromBody] Data data)
{
// stuff
}
}
Я также добавил CORS к своим "ConfigureServices" "метод в файле Startup.cs.
services.AddCors(options =>
{
options.AddPolicy("VueCorsPolicy", builder =>
{
builder
.WithOrigins("http://www.example.com")
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials();
});
});
И, наконец, я также добавил метод" Настроить "в файле Startup.cs:
app.UseCors("VueCorsPolicy");