Я пытаюсь создать проект WebApi, написанный на F#
, и включить CORS
.Контроллер:
type DoItController() =
inherit ApiController()
[<EnableCors(origins = "*", headers = "*", methods = "Get")>]
[<HttpGet>]
[<Route "api/GetGenerateExcel">]
member __.GetGenerateExcel() =
async {
// Some code
return "It works"
}
|> Async.StartAsTask
}
Откройте его прямо из браузера, он работает.Вызывая его, используя AngularJS
или просто Javascript
, я получаю 401
.
Эквивалентный контроллер в C # работает:
public class DoItController : ApiController
{
[EnableCors("*", "*", "Get")]
[HttpGet]
[Route("api/GetGenerateExcel")]
public async Task<string> GetGenerateExcel()
{
//Some code
return "It works"
}
}
Я также проверил Global.asax
, они также совпадают:
type Global() =
inherit HttpApplication()
static member RegisterWebApi(config: HttpConfiguration) =
config.EnableCors()
config.MapHttpAttributeRoutes()
config.Formatters.Remove(config.Formatters.XmlFormatter) |> ignore
member x.Application_Start() =
GlobalConfiguration.Configure(Action<_> Global.RegisterWebApi)
public class Global : HttpApplication
{
protected void Application_Start()
{
GlobalConfiguration.Configure(config =>
{
config.EnableCors();
config.MapHttpAttributeRoutes();
config.Formatters.Remove(config.Formatters.XmlFormatter);
});
}
}
Я проверил все пакеты nuget, они совпадают.Также в файле web.config нет различий, которые могут повлиять на функциональность.
Что еще можно проверить или проверить?
РЕДАКТИРОВАТЬ:Ниже приведена моя часть Javascript, она работает, если добавлено withcredentials = true
(а также на сервере):
var request = new XMLHttpRequest();
request.open('GET', url, true);
request.onload = function() {
if (request.status >= 200 && request.status < 400) {
// Success!
}
}
request.onerror = function() {
//Error
}
request.send();
AngularJS:
$http.get(url).then(function(response){
// Success!
}, function(error){
// Error
}