AJAX不会从web api c#返回值

Posted

技术标签:

【中文标题】AJAX不会从web api c#返回值【英文标题】:AJAX Won't return value from web api c# 【发布时间】:2020-01-14 23:36:39 【问题描述】:

我有一个用 C# 创建的简单 web api,它有一个返回字符串的方法

    public string Get()
    
        return "Welcome Web API online";
    

我现在通过javascript调用它,它成功命中了doe但是它不会返回任何数据,它总是落入错误函数,

var url = "https://localhost:44381/api/accounts";

$.ajax(
    type: 'GET',
    dataType: 'json',
    url: url,
    success: function (data) 
        console.log(data);
    ,
    error: function (data)  console.log(data); 
);

查看控制台日志,显示:

跨域请求被阻止:同源策略不允许读取位于https://localhost:44381/api/accounts的远程资源?

请赐教。

【问题讨论】:

您需要启用 CORS 并设置允许的主机列表,这将允许您的后端接收来自不同主机的请求。 也许这有帮助:jonhilton.net/cross-origin-request-blocked @Sahil 帮助很大,谢谢:) @Rumpelstinsk 明白了.. 现在我明白了 【参考方案1】:

当我们使用 Ajax、Angular 等访问具有不同来源的 URL 时,需要在不同的来源端处理 CORS(跨域请求共享)。 在您的 web api 项目中粘贴以下代码。在 Global.asax.cs 文件中

protected void Application_BeginRequest(object sender, EventArgs e)
    
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");

        if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
        
            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
            HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
            HttpContext.Current.Response.End();
        
    

我对你有帮助。它对我有用。

【讨论】:

谢谢!它工作......很好的解决方案,没有 nuget 包

以上是关于AJAX不会从web api c#返回值的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Java Rest Web 服务返回 ajax 值?

如何从 Angular 7 调用 Web API 返回布尔值?

我无法在 C# 中使用 Jquery 和 Ajax 从控制器向 Razor 视图发送值

如何使用 json 从 web.api 获取返回值到 mvc 控制器?

如何从 ASP.NET Core Web API 中的 SQL Server 存储过程中获取返回值

在 Web 服务中返回列表时,只有在返回值时才会出现错误?