当前位置: 首页 > 知识库问答 >
问题:

Microsoft Owin Cors允许所有不在Chrome for Web API中工作的应用程序

丌官淇
2023-03-14

我在调用Web API的JS SPA上创建了。我正在使用CORS允许使用标签“汇编: OwinStartup”和“app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll)”的所有Web API请求;

在此完成申请

对于边缘请求是成功的,而在Chrome不是。我得到错误:未能加载https://localhost:44373/api/location?cityName=dc:请求的资源上不存在“访问控制允许源”标头。因此不允许访问源“https://localhost:44392”。

有趣的是,我无法在开发人员工具中看到两者的任何“访问控制-允许-起源”请求标头。

对于Chrome:

:权限:localhost:44373:方法:GET:路径:/api/位置?cityName=dc:方案:https接受:应用程序/json,文本/普通,/接受编码:gzip,缩小,br接受语言:en-US,en;q=0.9,bn;q=0.8缓存控制:无缓存来源:https://localhost:44392pragma:无缓存引用:https://localhost:44392/用户代理:Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,如Gecko)Chrome /63.0.3239.108Safari /537.36

对于边缘:

Accept: application/json, text/plain, / Accept-Encoding: gzip, deflate, peerdist Accept-Language: en-US Host: localhost:44373 Origin: https://localhost:44392 Referer: https://localhost:44392/ User-Agent: Mozilla/5.0 (Windows NT 10.0;Win64;x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393 X-P2P-PeerDist: Version=1.1 X-P2P-PeerDistEx: MinContentInformation=1.0, MaxContentInformation=2.0

我的启动页面如下所示:

共有2个答案

刁星渊
2023-03-14

我对它在Edge中“工作”的猜测是因为它检测到本地主机并决定不进行CORS检查;但Chrome将始终进行检查。

无论如何,你看不到标题,因为它不在那里。要让它工作,请执行以下操作:

添加这2个包:Microsoft.AspNet.WebApi.Owin和Microsoft.Owin.Host.SystemWeb

注释掉< code>GlobalConfiguration。配置(WebApiConfig。注册);从< code>global.asax文件中删除,因为我们希望将OWIN用于Web API。

在您的< code >启动中,用以下代码替换< code>Configuration():

public void Configuration(IAppBuilder app)
{
    app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);

    HttpConfiguration config = new HttpConfiguration();
    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
    app.UseWebApi(config);
}
翟泰
2023-03-14

你必须用这行代码作为启动类的第一条语句-

 public void Configuration(IAppBuilder app)
    {
        app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
...
...
...
 类似资料:
  • 问题内容: 我一直在使用SQL Server,现在正在将MySQL用于一个项目。使用SQL Server,我们的开发人员可以在知道主机,用户名和密码的情况下连接到本地计算机上的远程数据库。但是,使用MySQL,要使开发人员能够从其本地计算机访问,我一直必须登录MySQL并执行: 开发人员机器的IP地址在哪里。当然,如果他们更改网络,则必须再次执行。有没有一种方法可以允许所有远程连接(如我在SQL

  • 我在WebSphere控制台上部署了WAR文件,并将其映射到数据源。我能够测试我用PostgreSQL服务器详细信息配置的数据源。但是我的应用程序没有连接到服务器。我是新来的WebSphere,谁能帮我配置基于下面context.xml文件的数据源。我的应用程序在tomcat中工作得很好,但在WebSphere中却不行。 我认为我在数据源配置中做错了什么。

  • 验证:我只需要文本框中的数字空间和加号

  • 我试图请求相机权限,但每当我运行我的项目,我得到我的应用程序已经停止弹出,然后它显示允许或拒绝选项,如果我点击永远不再显示选项,它不会让我按允许。如果我允许我的应用程序运行它存在,我再次必须打开应用程序。但问题会消失,我的应用程序将在下一次尝试中完美运行...这是logcat 07-26 18:41:56.080 3003-3003/com.example.android.camerapermis

  • 我用苹果脚本做了一个叫做星期五的应用程序。当我告诉它“打开chrome”时,它会打开谷歌chrome,这是在脚本编辑器和脚本编辑器之外工作的。我也可以告诉它“打开一个新标签”,它会用击键打开一个新标签: 现在,上面的代码只在我在脚本编辑器上运行FRIDAY时有效,但在我将FRIDAY保存为应用程序并运行它时无效。 脚本编辑器和我的应用程序(星期五)具有可访问性,实际上星期五具有完整的磁盘可访问性。

  • 我正在使用swagger/openAPI 3.0.0生成python3烧瓶API。此API提供JSON响应。如果我的JSON响应的属性值是None,我需要它在响应中显示为null。相反,该属性将从响应中完全删除。我知道这是一个愚蠢的要求,但我在这件事上没有选择。 在我的傲慢定义中,我有: 我也试过 但结果是一样的。 如何使值为时不会从响应中删除?