Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.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# 如果我';我使用OWIN Startup.cs类并将所有配置移到那里?_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 5_Owin - Fatal编程技术网

C# 如果我';我使用OWIN Startup.cs类并将所有配置移到那里?

C# 如果我';我使用OWIN Startup.cs类并将所有配置移到那里?,c#,asp.net,asp.net-mvc,asp.net-mvc-5,owin,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 5,Owin,比如说,在一个全新的ASP.NET MVC 5应用程序中,它是由MVC with Individual Accounts模板创建的,如果我删除Global.asax.cs类并将其配置代码移动到Startup.csconfiguration()方法,如下所示,有哪些缺点 public partial class Startup { public void Configuration(IAppBuilder app) { AreaRegistration.Regi

比如说,在一个全新的ASP.NET MVC 5应用程序中,它是由MVC with Individual Accounts模板创建的,如果我删除
Global.asax.cs
类并将其配置代码移动到
Startup.cs
configuration()
方法,如下所示,有哪些缺点

public partial class Startup
{
     public void Configuration(IAppBuilder app)
     {
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);

        ConfigureAuth(app);
    }
}

我的好处是,当将ASP.NET 4应用程序升级到ASP.NET 5并使用现在必须在Startup.cs类中配置的部分时,我没有在两个不同的类中进行依赖项注入和其他配置,这两个类似乎与启动相关,和配置。

Startup.configuration的调用时间略晚于应用程序的启动时间,但我认为在大多数情况下,两者之间的差异不会有多大影响

我认为我们在Global.asax中保留其他代码的主要原因是:

  • 与以前版本的MVC保持一致。(目前每个人都希望在这里找到此代码。)
  • 能够添加其他事件处理程序。在Global.asax中,您可以处理其他方法,如Session\u Start和Application\u Error
  • 各种身份验证场景中的正确性。只有在bin目录中有Microsoft.Owin.Host.SystemWeb.dll时,才会调用Startup.Configuration方法。如果删除此DLL,它将自动停止调用Startup.Configuration,这可能很难理解
  • 我认为第三个原因是最重要的一个,我们默认情况下没有采用这种方法,因为有些场景不包括使用此DLL,并且能够更改身份验证方法而不使放置不相关代码(如路由注册)的位置无效是很好的


    但是,如果这些原因都不适用于您的场景,我认为您可以使用这种方法。

    对于那些寻找完整步骤的人:如果您希望创建基于OWIN、IIS托管的web API,这些步骤应该可以帮助您实现:

  • 文件->新建->项目
  • 在对话框中,
    已安装->模板->其他项目类型->Visual Studio解决方案->针对.NET 4.6的空白解决方案
  • 在解决方案上,右键单击,添加
    Project->Web->ASP.NET Web应用程序
    (针对.NET 4.6)

    3.1现在在ASP.NET 4.5模板中,选择Empty作为模板

    3.2这将创建一个包含两个nuget软件包的空白解决方案:

    Microsoft.CodeDom.Providers.DotNetCompilerPlatform v 1.0.0
    Microsoft.Net.Compilers v 1.0.0
    
  • 安装以下软件包:

    Install-Package Microsoft.AspNet.WebApi.WebHost -Version 5.2.3
    Install-Package Microsoft.AspNet.WebApi -Version 5.2.3
    Install-Package WebApiContrib.Formatting.Razor 2.3.0.0
    
  • 对于OWIN:

    Install-Package Microsoft.Owin.Host.SystemWeb 
    Install-Package Microsoft.AspNet.WebApi.OwinSelfHost    
    
    然后使用配置方法添加Startup.cs:

    [assembly:OwinStartup(typeof(namespace.Startup))]
    public class Startup
        {
            /// <summary> Configurations the specified application. </summary>
            /// <param name="app">The application.</param>
            public static void Configuration(IAppBuilder app)
            {
                var httpConfiguration = CreateHttpConfiguration();
    
                app
                    .UseWebApi(httpConfiguration);
            }
    
            /// <summary> Creates the HTTP configuration. </summary>
            /// <returns> An <see cref="HttpConfiguration"/> to bootstrap the hosted API </returns>
            public static HttpConfiguration CreateHttpConfiguration()
            {
                var httpConfiguration = new HttpConfiguration();
                httpConfiguration.MapHttpAttributeRoutes();
    
                return httpConfiguration;
            }
    }
    
    [程序集:OwinStartup(typeof(namespace.Startup))]
    公营创业
    {
    ///配置指定的应用程序。
    ///应用程序。
    公共静态无效配置(IAppBuilder应用程序)
    {
    var httpConfiguration=CreateHttpConfiguration();
    应用程序
    .UseWebApi(httpConfiguration);
    }
    ///创建HTTP配置。
    ///用于引导托管API的
    公共静态HttpConfiguration CreateHttpConfiguration()
    {
    var httpConfiguration=新的httpConfiguration();
    httpConfiguration.MapHttpAttribute路由();
    返回httpConfiguration;
    }
    }
    

    现在添加一个继承自
    ApiController
    的类,使用
    RoutePrefix
    属性对其进行注释,并使用
    Route+HttpGet/PutPost
    对其操作方法进行注释(表示您要使用的Http谓词)这是我对启动/托管web应用程序是如何演变的理解,因为接下来的过程非常混乱。小结:

    1。经典ASP.NET:只编写要在强制IIS管道的最后一步中运行的应用程序代码

    2。带有OWIN的ASP.NET:配置.NET Web服务器并编写应用程序代码。不再直接耦合到IIS,因此您不再被迫使用它

    3。ASP.NET核心:配置主机和Web服务器以使用和编写应用程序代码。如果以.NET核心而不是完整的.NET框架为目标,则不再强制使用.NET Web服务器


    现在,我将更详细地介绍它的工作原理以及用于启动应用程序的类:

    经典ASP.NET 经典的ASP.NET应用程序将
    Global.asax
    文件作为入口点。这些应用程序只能在IIS中运行,并且您的代码将在IIS管道的末尾执行(因此,在代码运行之前,IIS负责CORS、身份验证等)。由于IIS 7,您可以在集成模式下运行应用程序,该模式将ASP.NET运行时集成到IIS中。这使您的代码能够配置以前(或仅在IIS本身中)无法实现的功能,例如在
    Global.asax
    文件的
    应用程序启动
    事件中,或使用
    web.config
    文件中新的
    部分

    带OWIN的ASP.NET 首先不是一个库,而是一个.NETWeb服务器(例如IIS)如何与web应用程序交互的规范。微软自己有一个名为OWIN的实现(通过几个不同的NuGet包分发)。此实现提供了在
    启动
    类中遇到的
    IAppBuilder
    接口以及Microsoft提供的一些OWIN中间件组件(OMC)。使用
    IAppBuilder
    基本上可以以即插即用的方式构建中间件,为Web服务器创建管道(除了IIS7+中的ASP.NET管道,如上所述),而不是绑定到IIS管道(但现在您使用CORS的中间件组件,用于身份验证的中间件组件…)。因此,您的应用程序不再专门耦合到IIS,您可以在任何.NET Web服务器上运行它,例如:

    • 该软件包可用于自组装