gpt4 book ai didi

angularjs - WebAPI CORS 不允许 Post 请求

转载 作者:行者123 更新时间:2023-12-02 02:49:23 24 4
gpt4 key购买 nike

我已经用尽了我能找到的有关 Cors 的所有资源,但在从 Angular 的 $http 服务(通过 Chrome)发送请求时仍然收到以下错误消息:

POST http://localhost:61459/api/LoginAuth/PostLoginByHandle 500 (Internal Server Error) 

获取请求工作得很好。我发现了一百种相似指令的变体,这些指令似乎对其他人也有效,但我就是无法破解这个。我将发布我的代码。

WebApi配置:

public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{

// Web API configuration and services




// Web API routes
config.MapHttpAttributeRoutes();

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

//var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().First();
//jsonFormatter.SerializerSettings = new CamelCasePropertyNamesContractResolver();

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




}
}

根据我的理解,这应该足以允许全局范围内的任何 Cors 请求。此外,我将 Controller 标记为:

[EnableCors(origins: "*", headers: "*", methods: "*")]

我尝试使用我在网上找到的各种内容来修改我的 web.config,但我了解到以编程方式执行此操作时没有必要。知道我做错了什么吗?

我已将这篇文章标记为 angularjs,以防万一我在那里做错了什么,因为我对此很陌生。这是我的电话:

    $http.post("http://localhost:61459/api/LoginAuth/PostLoginByHandle",this.LoginRequest).success(function(data){
testCtrl.user = data;
console.log("Retrieved: " + data);
});

**编辑:当我删除顶部方法时,我可以使用 Postman 来访问 Controller 。知道为什么这些会发生冲突吗? postman 给出了这个错误:

"Message": "An error has occurred.",
"ExceptionMessage": "Multiple actions were found that match the request: \r\nLoginByKey on type RecruitingTool.Web.Controllers.LoginAuthController\r\nPostLoginByHandle on type RecruitingTool.Web.Controllers.LoginAuthController"

这是 Controller 代码。我不明白为什么这些会发生冲突:

    [HttpPost]
public LoginResult LoginByKey(LoginRequest req)
{
LoginResult l = new LoginResult();
if (!string.IsNullOrEmpty(req.Key) &&
HttpContext.Current.Cache["credentials." + req.Username.ToUpper()].ToString() == req.Key)
{
l.Success = true;
}
else
{
l.Success = false;
l.ErrorMessage = "The credentials key is not valid.";
}
return l;
}


[HttpPost]
[EnableCors(origins: "*", headers: "*", methods: "POST")]
public LoginResult PostLoginByHandle(LoginRequest req)
{
LoginResult l = new LoginResult();
if (req.Username.ToUpper() == "TESTUSER" && req.Password == "test")
{
//change to authenticate against DB
l.Success = true;
l.CredentialsKey = Guid.NewGuid().ToString();
l.ErrorMessage = "";
HttpContext.Current.Cache["credentials." + req.Username.ToUpper()] = Guid.NewGuid().ToString();
}
else
{
l.Success = false;
l.ErrorMessage = "The username or password is not correct. Please check your information and try again.";
}

return l;
}

**编辑 2:问题是两种方法的默认路由之间存在冲突。我不确定为什么会出现这种情况,但是一旦我为它们指定了明确的路线,问题就解决了。如果有人知道的话,我仍然有兴趣知道答案。谢谢大家!

最佳答案

如果您在 Web API POST Controller 操作中放置一个断点,它是否不会命中该断点? HTTP 500 通常表示您的代码存在一些问题(未处理的异常)。

如果它没有触发该 Controller 操作,它一定是在管道中较早的位置。您是否尝试过直接从 POSTman 之类的东西直接发布到您的 API 方法? Chrome 的非常有用的扩展..

关于angularjs - WebAPI CORS 不允许 Post 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26559647/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com