我们有一个写得非常糟糕的遗留WebSite应用程序,我们正试图慢慢地将其转换为MVC。
作为其中的一部分,我们将创建一组MVC控制器,作为权宜之计,我们希望能够从遗留网站中调用这些控制器。
到目前为止,我有以下在网站aspx页面作为一个事件的点击按钮;
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的值时,在网站ajax调用中我会得到以下错误;
XMLHttpRequest无法加载http://localhost:49443/Home/TestAjaxMethod。请求的资源上没有“访问-控制-允许-原产地”标题。因此,“http://localhost:49252”源是不允许访问的。
令人困惑的是,Ajax调用使其成为控制器方法,但我似乎无法从中返回值。
更新
即使我从WebApiConfig和控制器中删除了对Cors的所有引用,也仍然可以使用MVC方法,并得到相同的错误。
发布于 2017-05-11 08:31:49
正如注释中所指出的,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);
}
}
}然后将[AddCorsHeader]添加到相关方法中。
https://stackoverflow.com/questions/43907622
复制相似问题