C# 跨域Cors问题
我们有一个写得非常糟糕的遗留网站应用程序,我们正试图慢慢地转换为MVC 作为这项工作的一部分,我们将创建一组MVC控制器,作为权宜之计,我们希望能够从遗留网站调用这些控制器 到目前为止,我已经在网站的aspx页面作为一个按钮点击事件如下C# 跨域Cors问题,c#,ajax,asp.net-mvc,cors,C#,Ajax,Asp.net Mvc,Cors,我们有一个写得非常糟糕的遗留网站应用程序,我们正试图慢慢地转换为MVC 作为这项工作的一部分,我们将创建一组MVC控制器,作为权宜之计,我们希望能够从遗留网站调用这些控制器 到目前为止,我已经在网站的aspx页面作为一个按钮点击事件如下 function CallControllerMethod() { $.ajax({ type: 'GET', dataType: "text", url: "http://localhost:49443/
function CallControllerMethod() {
$.ajax({
type: 'GET',
dataType: "text",
url: "http://localhost:49443/Home/TestAjaxMethod",
success: function (response) {
alert(response);
},
error: function (e) {
console.log(e);
}
});
}
这将调用MVC项目中的控制器方法
[EnableCors("*", "*", "*")]
public class HomeController : Controller
{
[HttpGet]
[EnableCors("*","*","*")]
public int TestAjaxMethod()
{
return 10;
}
}
在MVC应用程序的WebApiConfig中,我有这个
var cors = new EnableCorsAttribute("*", "*", "*");
configuration.EnableCors(cors);
因此,当我从网站调用控制器方法时,mvc控制器中的断点被命中。但是,当我返回值10时,在Web ajax调用中我得到以下错误:
无法加载XMLHttpRequest。请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源“”
令人困惑的是,Ajax调用将其转换为controllers方法,但我似乎无法从中返回值
更新
即使我从WebApiConfig和控制器中删除了对Cors的所有引用,MVC方法仍然存在,并且我得到了相同的错误。如注释中所述,
EnableCors
属性仅适用于WebAPI控制器。如果您想将CORS头添加到常规MVC方法中,可以手动添加
例如,下面是我过去使用过的一些代码:
var origin = Request.Headers["Origin"];
if (origin != null)
{
Response.AddHeader("Access-Control-Allow-Origin", origin);
}
或者,您可以创建自己的属性:
public class AddCorsHeader : ActionFilterAttribute
{
public override void OnActionExecuted(HttpActionExecutedContext context)
{
IEnumerable<string> origin;
if (context.Request.Headers.TryGetValues("Origin", out origin))
{
context.Response.Headers.Add("Access-Control-Allow-Origin", origin);
}
}
}
public类AddCorsHeader:ActionFilterAttribute
{
公共覆盖无效OnActionExecuted(HttpActionExecutedContext)
{
可数起源;
if(context.Request.Headers.TryGetValues(“Origin”,out Origin))
{
context.Response.Headers.Add(“访问控制允许原点”,原点);
}
}
}
然后将
[AddCorsHeader]
添加到相关方法中。您是否尝试过将返回类型例如更改为JsonResult
并将返回代码更改为returnjson(新的{Result=10})代码>?我返回的是json,但我遇到了相同的错误,所以我尝试使测试尽可能简单。webapi属性对mvc控制器没有影响。对,我有点注意到:)那么什么呢?有什么原因不能使用webapi控制器吗?