WebAPI CORS 和 Ninject

2023-12-20

我有一个 C# WebAPI 项目,它具有 ninject 并且所有 get 函数都可以工作。 然而,每次我尝试发布时,我都会收到来自 api 的“方法不允许”响应。

我读过一些地方,这是 api 拒绝跨源调用的原因。

所以我使用包管理器控制台并安装了 Microsoft.AspNet.WebApi.Cors nugent 包并按照文章中的说明进行操作http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api.

我现在的问题是 Ninject 无法工作,但抛出以下内容: 尝试通过方法“System.Web.Http.GlobalConfiguration..cctor()”访问字段“System.Web.Http.GlobalConfiguration.CS$9__CachedAnonymousMethodDelegate2”失败。"}

有人能帮我一下吗?

引发错误的行是: System.Web.Http.GlobalConfiguration.Configuration.DependencyResolver = new Ninject.WebApi.DependencyResolver.NinjectDependencyResolver(kernel);

Ninject 配置文件

public static class NinjectWebCommon
{
    private static readonly Bootstrapper bootstrapper = new Bootstrapper();

    /// <summary>
    /// Starts the application
    /// </summary>
    public static void Start()
    {
        DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
        DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
        bootstrapper.Initialize(CreateKernel);
    }

    /// <summary>
    /// Stops the application.
    /// </summary>
    public static void Stop()
    {
        bootstrapper.ShutDown();
    }

    /// <summary>
    /// Creates the kernel that will manage your application.
    /// </summary>
    /// <returns>The created kernel.</returns>
    private static IKernel CreateKernel()
    {
        var kernel = new StandardKernel();
        kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
        kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();

        RegisterServices(kernel);

        System.Web.Http.GlobalConfiguration.Configuration.DependencyResolver = new Ninject.WebApi.DependencyResolver.NinjectDependencyResolver(kernel);

        return kernel;
    }

    /// <summary>
    /// Load your modules or register your services here!
    /// </summary>
    /// <param name="kernel">The kernel.</param>
    private static void RegisterServices(IKernel kernel)
    {
        kernel.Bind<MyCompany.Services.Domain.Repositories.IWorkRepository>().To<MyCompany.Services.Domain.Repositories.WorkRepository>();
        kernel.Bind<MyCompany.Services.Domain.Services.IAuthenticationService>().To<MyCompany.Services.Domain.Services.AuthenticationService>();
        kernel.Bind<MyCompany.Services.Domain.Utilties.IServiceFactory>().To<MyCompany.Services.Domain.Utilties.ServiceFactory>();
    }
}

网页配置文件

<?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <!-- 
        Application Settings 
    -->
  <appSettings>
    <add key="webpages:Version" value="2.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="PreserveLoginUrl" value="true" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>
  <!-- 
        Connection Strings 
    -->
  <connectionStrings>
    <!-- EDITED : Removed -->
  </connectionStrings>
  <!-- 
        System Web 
    -->
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
    <authentication mode="None" />
    <pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Optimization" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
    <profile defaultProvider="DefaultProfileProvider">
      <providers>
        <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
      </providers>
    </profile>
    <membership defaultProvider="DefaultMembershipProvider">
      <providers>
        <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
      </providers>
    </membership>
    <roleManager defaultProvider="DefaultRoleProvider">
      <providers>
        <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
      </providers>
    </roleManager>
    <sessionState mode="InProc" customProvider="DefaultSessionProvider">
      <providers>
        <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" />
      </providers>
    </sessionState>
  </system.web>
  <!-- 
        System Web Server
    -->
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
    </handlers>
    <httpProtocol>
      <customHeaders>
        <!-- Adding the following custom HttpHeader will help prevent CORS from stopping the Request-->
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Content-Type" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>
  <!-- 
        Runtime
    -->
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
  </entityFramework>
</configuration>

您必须记住将 Microsoft.AspNet.WebApi 添加或更新到 RC 版本:http://www.nuget.org/packages/Microsoft.AspNet.WebApi http://www.nuget.org/packages/Microsoft.AspNet.WebApi

在包管理器控制台中:

PM> Install-Package Microsoft.AspNet.WebApi -Pre

PM> Install-Package Microsoft.AspNet.WebApi.Client -Pre

PM> Install-Package Microsoft.AspNet.WebApi.Core -Pre

etc

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

WebAPI CORS 和 Ninject 的相关文章

随机推荐

  • 如何按工作日顺序(如日历周)而不是按字母顺序(在 C# 中)排序?

    我无法弄清楚如何按日期对独立存储中的 XML 文件中的查询输出进行排序 该日期是 xml 文件中的值 我的意思是它将按当天的第一个字母排序 因此它将返回星期五作为第一个字母 因为其中有 F 但这不是我想要的 相反 它们应该按工作日的顺序排序
  • 从 File.OpenRead() 返回流

    我正在编写一个 WCF 服务 该服务将允许 ASP Net 网站检索文件 基于本文 http msdn microsoft com en us library ms789010 aspx Y912 我的问题是 当我返回流时 它是空白的 为简
  • WordPress wp_localize_script 是做什么的? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有人可以解释一下吗wp localize script 做 即使我在 WP Codex 中读过它 我一开始也不明白它的作用 它允许您通过打
  • 如何在使用插件时将域添加到 next.config.js 的“next/image”

    这是我当前的设置 next config js const withImages require next images module exports withImages webpack config options return con
  • 使用 Promise 在 Node.js + Express 中进行错误处理

    使用 Node js Express 4 Mongoose 使用 Promise 而不是回调 我不知道如何整理我的错误处理 我得到的 相当简化的 是 app get xxx id function request response Xxx
  • 使用reduce在Javascript中构建过滤函数

    在一次采访中 有人向我提出了一个让我摸不着头脑的问题 我不想花周末担心结果 而是想尝试解决问题 但我无法弄清楚 使用下面的reduce函数 构建一个过滤函数 该函数将一个数组和一个测试函数作为参数 并返回一个新数组 该数组已根据测试函数过滤
  • SQL ORDER BY(序列)[重复]

    这个问题在这里已经有答案了 我有一个我想要的sql语句ORDER BY特定的顺序 SELECT FROM UserDB ORDER BY Role 我怎样才能将数据带到我的GridView表从顶部的 管理员 列出 然后是 用户 和 来宾 所
  • 如何在程序中获取 _GLOBAL_OFFSET_TABLE_ 地址?

    我想在我的程序中获取 GLOBAL OFFSET TABLE 的地址 一种方法是使用nm http linux about com library cmd blcmdl1 nm htmLinux 中的命令 可能会将输出重定向到文件并解析该文
  • 传递结构数组时遇到问题

    我一生都无法弄清楚如何在整个程序中传递这个结构数组 有人可以帮忙吗 现在我在 main 中收到一个错误 内容是 标记之前预期的主要表达式 Header ifndef HEADER H INCLUDED define HEADER H INC
  • 处理数据库中的层次结构数据

    我很想知道在数据库设计方面处理层次结构的最佳方法 最佳实践 是什么 这是我通常如何处理它们的一个小例子 节点表 NodeId int PRIMARY KEY NodeParentId int NULL DisplaySeq int NOT
  • 土耳其语字符上的 Postgres upper 函数未返回预期结果

    看起来像 postgresupper lower函数不处理土耳其语字符集中的选择字符 select upper Aa lower Aa from mytable 返回 AA aa 代替 AAI aai 请注意 正常的英语字符可以正确转换 但
  • 如何使用 Canvas Jetpack Compose 绘制曲线图

    有谁知道如何在 Jetpack Compose 中使用画布绘制每个角都弯曲的线条 我已经实现了这个使用Canvas drawPoints 但我想让每个角都弯曲成这样 非常感谢任何帮助 None
  • Flutter 和 Firestore 请求中没有用户信息

    Using flutter http flutter io 我已经安装了firebase 身份验证 https pub dartlang org packages firebase auth and 火库 https pub dartlan
  • 如何根据 AngularJS 中的过滤结果更改类?

    我无法弄清楚如何根据过滤器的状态 结果更改类的样式 我的代码 div div style margin top 30px a class item item recipe img class thumbnail src images thu
  • VS 2017 不会隐式将 const char* 转换为 char* [重复]

    这个问题在这里已经有答案了 我最近安装了 VS 2017 并遇到了一种奇怪的问题 基本上 如果不将硬编码字符串显式转换为 char 我就无法使用它们 如果我说类似的话Function test 它只会抛出一个错误 指出 const char
  • 优化 SELECT ... WHERE IN (...)

    我从外部系统收到一系列产品 ID 我必须显示保留序列的产品信息 我使用以下选择来执行此操作 SELECT FROM products WHERE prodid in 10331 11639 12127 ORDER BY Field prod
  • 多个独立的 mariadb 用法:多个容器还是一个?隔离与效率?

    我有一个建筑问题 假设我们有一个具有多个子系统的系统 A B 等等 每个子系统都需要保存其数据 并且它们都使用MariaDB 子系统A可能需要一个database as in create database 称为a db 和子系统B可能需要
  • 忘记放置常规图像,但它有 Retina @2x 图像

    我已经提交了我的应用程序 它支持常规版本和视网膜显示版本 我忘记放置一个常规图像文件 a png 但它有 电子邮件受保护 cdn cgi l email protection 视网膜图像 普通 iPhone 是否能够显示 电子邮件受保护 c
  • 挂钩事件时 C# 中的 COMException

    当尝试挂钩 COM 对象上的事件时 我收到 COM 异常 这是我试图执行的代码 COMClass a IComClass as ComClass a SomeEvent new SomeEvent EventHandler MethodNa
  • WebAPI CORS 和 Ninject

    我有一个 C WebAPI 项目 它具有 ninject 并且所有 get 函数都可以工作 然而 每次我尝试发布时 我都会收到来自 api 的 方法不允许 响应 我读过一些地方 这是 api 拒绝跨源调用的原因 所以我使用包管理器控制台并安