在我提出问题之前,我已经阅读了以下帖子:
这是我项目的文件夹布局:
的 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();
}
}
}
的的Web.config
<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
项目中有以下参考:
的更新:
忘了添加错误信息:
现在,
Owin
Startup
类(如访问Home/Index
)的逐步过程是什么?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 Bootstrapper
中正在Startup
但是,它无效。我的意思是我无法在IocConfig
中引用Startup
。如何解决这个问题?
答案 0 :(得分:6)
install-package Microsoft.Owin.Host.SystemWeb
)我将在此回答您的第三个问题。启动类是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 (我想通过&#34; Home / Index&#34;你的意思是MVC),请按照以下步骤操作:
install-package Microsoft.AspNet.Mvc
)。使页面继承自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>
global.asax
以设置路线。右键单击项目 - &gt;添加 - &gt;新商品 - &gt;全球应用类。将路由定义添加到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 :(得分:0)
有点晚了,但我找到了解决方法如何将OWIN Startup类放在单独的项目中。您在项目中完成的所有操作都是正确的,您只能在Bootstrapper项目的属性中应用一个更改。右键单击Bootstrapper项目,输入属性,单击Build选项卡并查找Output path。您应该看到标准输出补丁bin \ debug \,这意味着您的Bootstrapper dll将落在此文件夹中。您必须将其更改为整个Web应用程序所在的bin文件夹。
例如,我已经创建了两个项目的简单解决方案,第一个是空Web应用程序,第二个是带有OWIN Startup类的库。在第二个项目的属性中,我已将输出路径更改为.. \ OwinTest.Web \ bin。这将导致,在构建之后,所有dll将落在一个文件夹中。您现在可以运行您的应用程序并且OWIN Startup应该正常工作。
以下是Bootstrapper项目的属性设置屏幕: