MVC Web api:请求的资源上不存在“Access-Control-Allow-Origin”标头

2023-11-25

我尝试了本文中写的所有内容:http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api,但没有任何作用。 我正在尝试使用 angularJS 从 webAPI2 (MVC5) 获取数据以在另一个域中使用。

我的控制器看起来像这样:

namespace tapuzWebAPI.Controllers
{
    [EnableCors(origins: "http://local.tapuz.co.il", headers: "*", methods: "*", SupportsCredentials = true)]
    [RoutePrefix("api/homepage")]
    public class HomePageController : ApiController
    {
        [HttpGet]
        [Route("GetMainItems")]
        //[ResponseType(typeof(Product))]
        public List<usp_MobileSelectTopSecondaryItemsByCategoryResult> GetMainItems()
        {


            HomePageDALcs dal = new HomePageDALcs();
            //Three product added to display the data

            //HomePagePromotedItems.Value.Add(new HomePagePromotedItem.Value.FirstOrDefault((p) => p.ID == id));


            List<usp_MobileSelectTopSecondaryItemsByCategoryResult> items = dal.MobileSelectTopSecondaryItemsByCategory(3, 5);
            return items;

        }      
    }
}

您需要启用CORS在你的Web Api。全局启用 CORS 的更简单且首选的方法是将以下内容添加到网络配置

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="Access-Control-Allow-Origin" value="*" />
      <add name="Access-Control-Allow-Headers" value="Content-Type" />
      <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

请注意,Methods都是单独指定的,而不是使用*。这是因为在使用的时候出现了一个bug*.

您还可以启用CORS通过代码。

Update
下列NuGet需要包:Microsoft.AspNet.WebApi.Cors.

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.EnableCors();

        // ...
    }
}

然后您可以使用[EnableCors]像这样的操作或控制器上的属性

[EnableCors(origins: "http://www.example.com", headers: "*", methods: "*")]

或者您可以全局注册

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        var cors = new EnableCorsAttribute("http://www.example.com", "*", "*");
        config.EnableCors(cors);

        // ...
    }
}

您还需要处理预检Options requests with HTTP OPTIONS要求。

Web API需要回应Options请求以确认它确实配置为支持CORS.

要处理这个问题,您所需要做的就是发送一个空响应后退。您可以在操作中执行此操作,也可以在全局范围内执行此操作,如下所示:

# Global.asax.cs
protected void Application_BeginRequest()
{
    if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS")
    {
        Response.Flush();
    }
}

添加此额外检查是为了确保旧的APIs旨在仅接受GET and POST请求不会被利用。想象一下发送一个DELETE请求一个API设计的时候这个verb不存在。结果是不可预料的结果可能是危险的.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MVC Web api:请求的资源上不存在“Access-Control-Allow-Origin”标头 的相关文章

随机推荐

  • Android Studio 与 Google Play:缺少 Google Play 服务

    我使用的是 Ubuntu 14 Android Studio 0 8 6 我正在使用 Genymotion 运行应用程序 我得到的响应是 W GooglePlayServicesUtil Google Play services is mi
  • 异步 HttpModule MVC

    我有一个包含以下代码的同步 HttpModule
  • Python:无法在 Matplotlib 中渲染 Tex

    我最近将笔记本电脑升级到 Snow Leopard 将 TeX 更新到版本 3 1415926 TeX Live 2011 MacPorts 2011 5 并安装了 Python 2 7 3 所有这些安装完成后 我运行了 macport s
  • Node.js 将响应对象句柄传递给子进程

    我有一个http服务器和一个分叉的子进程 我希望父级接收请求并使用以下方式传递给分叉进程worker send 并且工作人员应该能够使用相同的响应对象处理响应并将其发送回请求者 我尝试在第二个参数中发送响应对象worker send 但它给
  • ASP.NET MVC。检查用户是否获得 JavaScript 授权

    我正在使用 ASP NET MVC Framework 3 和表单身份验证 我知道 如何在服务器端检查用户是否有权执行某些操作 使用 Authorize 并且我知道如何在操作或视图中检查这一点 使用User Identity IsAuthe
  • C++ 是否对 POD typedef 进行值初始化?

    C 是否对简单对象进行值初始化POD类型定义 Assuming typedef T Ptr does Ptr 进行值初始化并保证相等 T 0 e g Ptr p Ptr return Ptr 确实如此 对于一个类型T T 值初始化类型的 对
  • 创建名为“entityManagerFactory”的 bean 时出错 调用 init 方法失败

    我正在使用 Spring 和 Hibernate 开发一个完整的堆栈 Web 应用程序 尝试运行一些测试代码 但我不断收到此错误 这是完整的堆栈跟踪 java lang IllegalStateException Failed to loa
  • 如何在布局中间插入 QWidget?

    我正在使用 Qt 框架来构建我的图形用户界面 我用一个QGrid布局整齐地放置我的 QWidget 图形用户界面如下所示 我的应用程序定期在运行时向 GUI 添加新的小部件 这些新的小部件通常不会添加在 QLayout 的末尾 而是添加在中
  • Android Jetpack Compose 中第二次更改后,观察 LiveData 不会触发

    我正在使用 viewModel 将数据传递到我的撰写视图 问题是我想通过在 viewModel 中的模型内归档来处理展开和折叠视图 因此 如果某些 UI 单击 Expand 方法 我将调用 viewModel 和 doExpand 方法 如
  • 如何使用 Django Admin 中的 FileField 小部件将文件上传到 BinaryField?

    我想创建一个模型Changelog并使其可从管理页面进行编辑 这是它的定义方式models py class Changelog models Model id models AutoField primary key True auto
  • 想要在 AVD 上的 SD 卡中创建文件夹

    我想在SD卡中创建文件夹 我在 android 终端中使用以下命令 CD卡 目录音乐 mkdir 音乐失败 权限被拒绝 尝试下面的代码 它工作正常 you need to run emulator before run the below
  • Windows Phone 7 - CameraTask 不工作

    我的 WP7 应用程序使用 CameraCaptureTask 拍照 然后将其显示在我的屏幕上 该任务在模拟器上运行良好 但是当我将其部署到设备上时它停止工作 在调试时 我发现 CameraCaptureTaskObject Show 被调
  • 如何从Iframe获取父窗口的URL?

    我知道这是一个安全问题 但是HTML5有什么办法吗 因为我看到下面的代码打开了一个窗口 其中父母的 URL 在推文框中 在 iframe 中试试这个 它将提醒父窗口的位置 URL alert document referrer
  • 如何使用swift在IOS中实现marquee标签

    如何实施跑马灯标签在 iOS 中 我在 Objective C 中找到了示例 但我使用的是 Swift 用于在 swift 中创建选取框 在项目中添加下面的类https github com cbpowell MarqueeLabel 为此
  • 如何在闪亮的数据表中保存排序?

    我在页面上有表格 可以在列中排序 在我使用反应表重新加载数据后 不再排序 这里是 server R 代码 library shiny shinyServer function input output Return the requeste
  • Short 和Character 除了处理之外还有什么区别?

    据我所知 bytewise 看起来它们是相同的 它们都是 2 个字节长 Character然而 有更多的处理 静态 isLetter 方法等 虽然我的问题听起来很愚蠢 但它们是 除非我的第一个假设是错误的 否则为什么会有原始类型char a
  • 如何将 UTF8 字符串转换为 UTF16

    我通过处理客户端应用程序发送的请求来获取 UTF8 字符串 但字符串确实是UTF16 我能做些什么来将它放入我的本地字符串中是一个字母 后跟 0特点 我需要将该字符串转换为 UTF16 收到的字符串示例 S 0a 0m 0p 0l 0e U
  • PyQt QDialog 返回响应是或否

    我有一个 QDialog 类 confirmation dialog uic loadUiType ui confirmation dialog ui 0 class ConfirmationDialog QDialog confirmat
  • 使用领域模型和 POCO 类时,查询去哪里?

    我对领域模型 POCO 和 DDD 很陌生 所以我仍在尝试理解一些想法 我还不明白的一件事是如何保持我的域模型简单且与存储无关 但仍然能够以丰富的方式对其数据执行一些查询 例如 假设我有一个实体 Order 其中包含 OrdemItems
  • MVC Web api:请求的资源上不存在“Access-Control-Allow-Origin”标头

    我尝试了本文中写的所有内容 http www asp net web api overview security enabling cross origin requests in web api 但没有任何作用 我正在尝试使用 angul