我使用vS2012创建了一个mvc4 Web API项目。我使用以下教程来解决跨域资源共享,“ http://blogs.msdn.com/b/carlosfigueira/archive/2012/07/02/cors-support-in-asp-net-web-api- rc-version.aspx”。它工作正常,并且我将数据从客户端成功发布到服务器。之后,为了在我的项目中实现Autherization,我使用了以下教程来实现OAuth2:“ http://community.codesmithtools.com/CodeSmith_Community/b/tdupont/archive/2011/03/18/oauth-2-0-for -mvc-two-legged-implementation.aspx”。这有助于我在客户端获取RequestToken。但是,当我从客户端发布数据时,出现错误, “ XMLHttpRequest无法加载http://。Access-Control-Allow-Headers不允许请求标头字段Content-Type。”我的客户端代码看起来像 function PostLogin() { var Emp = {}; Emp.UserName = $("#txtUserName").val(); var pass = $("#txtPassword").val(); var hash = $.sha1(RequestToken + pass); $('#txtPassword').val(hash); Emp.Password= hash; Emp.RequestToken=RequestToken; var createurl = "http://localhost:54/api/Login"; $.ajax({ type: "POST", url: createurl, contentType: "application/json; charset=utf-8", data: JSON.stringify(Emp), statusCode: { 200: function () { $("#txtmsg").val("done"); toastr.success('Success.', ''); } }, error: function (res) { toastr.error('Error.', 'sorry either your username of password was incorrect.'); } }); };我的api控制器看起来像 [AllowAnonymous] [HttpPost] public LoginModelOAuth PostLogin([FromBody]LoginModelOAuth model) { var accessResponse = OAuthServiceBase.Instance.AccessToken(model.RequestToken, "User", model.Username, model.Password, model.RememberMe); if (!accessResponse.Success) { OAuthServiceBase.Instance.UnauthorizeToken(model.RequestToken); var requestResponse = OAuthServiceBase.Instance.RequestToken(); model.ErrorMessage = "Invalid Credentials"; return model; }
3 回答
幕布斯6054654
TA贡献1876条经验 获得超7个赞
正如这篇文章所暗示的,chrome中的错误:Access-Control-Allow-Headers不允许Content-Type,只需将其他标头添加到您的web.config中,就像这样...
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" />
</customHeaders>
</httpProtocol>
胡子哥哥
TA贡献1825条经验 获得超6个赞
很有可能是由于跨域请求,但可能并非如此。对我来说,我一直在调试API并将其设置Access-Control-Allow-Origin为*,但似乎最新版本的Chrome需要额外的标头。如果使用PHP,请尝试在文件前添加以下内容:
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
确保您尚未header在其他文件中使用过,否则将收到讨厌的错误消息。有关更多信息,请参阅文档。
- 3 回答
- 0 关注
- 8580 浏览
添加回答
举报
0/150
提交
取消