Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 跨域Cors问题_C#_Ajax_Asp.net Mvc_Cors - Fatal编程技术网

C# 跨域Cors问题

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/

我们有一个写得非常糟糕的遗留网站应用程序,我们正试图慢慢地转换为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时,在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控制器吗?