14

在我问我的问题之前,我已经浏览了以下帖子:

  1. 重命名 ASP.NET 项目文件和问题中提到的所有帖子 后,无法让 OWIN Startup 类在 IIS Express 中运行。
  2. OWIN 启动检测
  3. web.config 中需要 OwinStartupAttribute 来纠正服务器错误 #884
  4. 未检测到 OWIN 启动类

这是我项目的文件夹布局:

在此处输入图像描述
目前没有控制器或视图。只是Owin Startup文件。


启动.cs

using System;
using Microsoft.Owin;
using Owin;

[assembly: OwinStartup(typeof(Bootstrapper.Startup))]

namespace Bootstrapper
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.Run(async context =>
            {
                await context.Response.WriteAsync(GetTime() + " My First OWIN App");
            });
        }

        string GetTime()
        {
            return DateTime.Now.Millisecond.ToString();
        }
    }
}


网页配置

<appSettings>
    <add key="owin:AutomaticAppStartup" value="true" />
    <add key="owin:appStartup" value="Bootstrapper.Startup" />
    <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>


我在项目中有以下参考Bootstrapper

  1. 微软.Owin
  2. Microsoft.Owin.Host.SystemWeb
  3. 欧文
  4. 系统
  5. 系统核心


更新: 忘记添加错误消息:

在此处输入图像描述


现在,

  1. 为什么它不工作?
  2. Owin Startup在一个非常基本的项目(如访问)中添加和使用类的分步过程是Home/Index什么?
  3. 如何以及何时Owin Startup调用/执行类中的配置方法?


更新: 2016 年 12 月 10 日

检查Project-Folder-Layout. 在Bootstrapper项目中,我有以下文件:
IocConfig.cs

[assembly: PreApplicationStartMethod(typeof(IocConfig), "RegisterDependencies")]

namespace Bootstrapper
{
    public class IocConfig
    {
        public static void RegisterDependencies()
        {
            var builder = new ContainerBuilder();

            builder.RegisterControllers(typeof(MvcApplication).Assembly);
            builder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource());
            builder.RegisterModule<AutofacWebTypesModule>();

            builder.RegisterType(typeof(MovieService)).As(typeof(IMovieService)).InstancePerRequest();
            builder.RegisterType(typeof(MovieRepository)).As(typeof(IMovieRepository)).InstancePerRequest();

            var container = builder.Build();
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
        }
    }
}

现在我想IocConfig.RegisterDependencies()OWIN Startup课堂上执行。我在顶部做using BootstrapperStartup但它不工作。我的意思是我无法IocConfigStartup. 如何解决这个问题?

4

3 回答 3

10
  1. 创建一个空的 Web 应用程序项目
  2. install-package Microsoft.Owin.Host.SystemWeb使用 NuGet ( )安装 OWIN
  3. 在名为“Startup.cs”的项目根目录中添加一个空类

在这里,我将回答您的第三个问题。启动类是 OWIN 的入口点,正在自动查找。如官方文档中所述:

命名约定:Katana 在与程序集名称或全局命名空间匹配的命名空间中查找名为 Startup 的类。

请注意,您也可以选择自己的 Startup 类名称,但您必须使用装饰器或 AppConfig 进行设置。如此处所述: https ://www.asp.net/aspnet/overview/owin-and-katana/owin-startup-class-detection

这是基本且有效的 OWIN 测试所需的一切:

using Owin;
using System;

namespace OwinTest
{
    public class Startup
    {
        public static void Configuration(IAppBuilder app)
        {
            app.Use(async (ctx, next) =>
            {
                await ctx.Response.WriteAsync(DateTime.Now.ToString() + " My First OWIN App");
            });
        }
    }
}

如果您想使用 MVC(我猜“Home/Index”是指 MVC),请按照以下步骤操作:

  1. 安装 MVC NuGet ( install-package Microsoft.AspNet.Mvc)。
  2. 将“Controllers”文件夹添加到您的项目中。
  3. 在新的“Controlles”文件夹下创建一个新的空控制器(右键单击 -> 添加 -> MVC 5 Controller - Empty)并将其命名为“HomeController”。
  4. 在新创建的“Views/Home”文件夹下创建一个视图页面。右键单击-> 添加-> 查看。将其命名为“索引”并取消选中“使用布局页面”。

使页面继承自 WebViewPage。它应该看起来像这样:

@inherits System.Web.Mvc.WebViewPage
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <div> 
        <h1>Owin Hello</h1>
    </div>
</body>
</html>
  1. 添加一个global.asax来设置路线。右键单击项目 -> 添加 -> 新建项目 -> 全局应用程序类。

将路由定义添加到 Application_Start 方法:

protected void Application_Start(object sender, EventArgs e)
{
    RouteTable.Routes.MapRoute(name: "Default",
        url: "{controller}/{action}",
        defaults: new { controller = "Home", action = "Index" });
}
  1. 不要忘记注释掉上面的“..await ctx.Response.WriteAsync...”中间件。否则它会干扰 MVC。
  2. 运行项目。应该工作。
于 2016-12-09T14:10:03.897 回答
3

有点晚了,但我找到了如何将 OWIN Startup 类放在单独的项目中的解决方案。您在项目中所做的一切都是正确的,您只能在 Bootstrapper 项目的属性中应用一项更改。右键单击 Bootstrapper 项目,输入属性,单击构建选项卡并查找输出路径。您应该会看到标准输出路径 bin\debug\,这意味着您的 Bootstrapper dll 将位于此文件夹中。您必须将其更改为您的整个 Web 应用程序所在的 bin 文件夹。

例如,我创建了一个包含两个项目的简单解决方案,第一个是一个空的 Web 应用程序,第二个是一个带有 OWIN Startup 类的库。在第二个项目的属性中,我将输出路径更改为 ..\OwinTest.Web\bin。这将导致构建后所有 dll 都放在一个文件夹中。您现在可以运行您的应用程序,并且 OWIN Startup 应该可以正常工作。

下面是 Bootstrapper 项目的属性设置屏幕:

在此处输入图像描述

于 2017-09-08T09:28:19.540 回答
1

WebApp 类使用反射来获取指向 Configuration(IAppBuilder) 方法的指针,然后调用它。如果您作为泛型类型参数提供的类没有带有预期参数的配置方法,那么您在运行时会收到错误消息。

于 2020-01-17T15:52:35.990 回答