【发布时间】:2014-12-20 23:36:48
【问题描述】:
我已经用尽了所有关于 Cors 的资源,但在从 Angular 的 $http 服务(通过 Chrome)发送请求时仍然收到以下错误消息:
POST http://localhost:61459/api/LoginAuth/PostLoginByHandle 500 (Internal Server Error)
获取请求工作得很好。我发现了一百种似乎对其他人有用的类似指令,但我就是无法破解这个指令。我会发布我的代码。
WebApiConfig:
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 请求。另外,我用以下标记控制器:
[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);
});
**编辑:当我删除 top 方法时,我可以用 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"
这里是控制器代码。我不明白为什么这些会发生冲突:
[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:问题是两种方法的默认路由之间存在冲突。我不确定为什么会这样,但是一旦我为它们指定了一个明确的路线,它就解决了。如果有人知道,我仍然很想知道答案。谢谢大家!
【问题讨论】:
标签: angularjs asp.net-mvc asp.net-web-api asp.net-web-api2