ASP.NET中MVC跨域CORS访问的设置
在ASP.NET中需要在多个网站间进行跨域访问,一般使用代码或者配置应该都可以实现。
如有在A站需选择A站或者通过B站进行登录,如果使用B站登录后将转向A站。
先介绍使用配置的方式。
由于需要B站接收A站的请求,因此需要在B站的response的Header中添加带有Access-Control-Allow-前缀的属性。
简单点的方法是可以在Web.config中,增加如下配置。
在B站的system.webServer节点中加入
<httpProtocol> <customHeaders> <add name="Access-Control-Allow-Origin" value="http://domainA" /> <add name="Access-Control-Allow-Headers" value="X-AspNet-Version,X-Powered-By,Date,Server,Accept,Accept-Encoding,Accept-Language,Cache-Control,Connection,Content-Length,Content-Type,Host,Origin,Pragma,Referer,User-Agent,Authorization" /> <add name="Access-Control-Allow-Methods" value="GET, PUT, POST, DELETE, OPTIONS" /> <add name="Access-Control-Max-Age" value="1000" /> <add name="Access-Control-Allow-Credentials" value="true" /> </customHeaders> </httpProtocol>
注意:红色的部分表示,在跨域请求时允许带有cookie的内容,以便保存认证需要的信息。
关于A站的访问代码如下:
A站的登录页面Js代码
function submit(acc, psw, sys) {
switch (parseInt(sys)) {
case 1:
//A站登录逻辑 。。。
break;
case 2:
//B站
$.ajax({
url: "http://localhost:63864/Account/Logon",
type: "post",
xhrFields: {
withCredentials: true
},
crossDomain: true,
dataType: "json",
data: { userName: acc, password: psw, authkey: null, dep: null, keepSignedIn: false },
success: function (data) {
if (!data.IsSuccess) {
$(".login-msg").text(data.ErrorMsg);
}
else {
window.location = 'http://localhost:63864/Home/Index';
}
}
});
break;
}
注意:红色的部分表示,在跨域请求时允许带有cookie的内容,以便保存认证需要的信息。
关于使用代码的方式,主要是将web.config中的内容放置在代码中,具体下次讨论。
参考地址:
https://stackoverflow.com/questions/6290053/setting-access-control-allow-origin-in-asp-net-mvc-simplest-possible-method
https://stackoverflow.com/questions/24687313/what-exactly-does-the-access-control-allow-credentials-header-do
https://stackoverflow.com/questions/36864674/access-control-allow-credentials-missing

浙公网安备 33010602011771号