我正在使用IE 10,Firefox 24,Chrome 29。
我有一个在ASP.NET MVC 4(IIS 8)上运行的服务器,在控制器中有一个简单的功能:
[HttpPost]
public ActionResult Register(string PhoneNumber, string DisplayName)
{
// Some commented code here ...
ViewBag.Message = "Working!";
return View();
}
视图如下:
@{
ViewBag.Title = "Register";
}
@ViewBag.Message
Ajax调用如下:
$.ajax({
type: "POST",
url: "http://localhost:1283/home/Register",
data: {
phoneNumber: "123",
displayname: "Miko"
},
success: function (response) {
alert("In success: " + response);
},
error: function (result) {
alert('In error: '+ result);
}
})
在所有浏览器中,进行了AJAX调用,服务器中的Register()被触发,但在完成后,此代码在Internet Explorer中正常工作,但总是使用Firefox \ Chrome转到'error()'。
如何让这些功能同时适用于Firefox和Chrome?
感谢。
答案 0 :(得分:0)
首先,我认为你必须看看Access_control_CORS。
在MVC.NET中有一种简单的方法可以解决这个问题。 将以下代码添加到Global.asax
protected void Application_BeginRequest(object sender, EventArgs e)
{
if (!string.IsNullOrWhiteSpace(Request.Headers["Origin"]))
{
if (IsOriginInCrossDomainWhiteList(Request.Headers["Origin"]))
{
Response.AddHeader("Access-Control-Allow-Origin", Request.Headers["Origin"]);
}
else
{
Response.End();
}
}
}
internal static bool IsOriginInCrossDomainWhiteList(string origin)
{
Uri uri;
if (Uri.TryCreate(origin, UriKind.Absolute, out uri))
{
foreach (var whiteDomain in Properties.Settings.Default.CrossDomainWhiteList)
{
if (string.Compare(uri.Host, whiteDomain, true) == 0)
{
return true;
}
}
}
return false;
}
并将一些域添加到Web.config中,如:
<applicationSettings>
<YourProject.Properties.Settings>
<setting name="CrossDomainWhiteList" serializeAs="Xml">
<value>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<string>www.youhost.com</string>
</ArrayOfString>
</value>
</setting>
</YourProject.Properties.Settings>
</applicationSettings>
然后,您可以在CrossDomainWhiteList
中添加的域中使用ajax调用。