14

質問する前に、次の投稿を既に読んでいます。

  1. ASP.NET プロジェクト ファイルと質問に記載されているすべての投稿の 名前を変更した後、OWIN スタートアップ クラスを IIS Express で実行できません。
  2. OWIN スタートアップ検出
  3. サーバー エラー #884 を修正するには、web.config に OwinStartupAttribute が必要です
  4. OWIN スタートアップ クラスが検出されない

私のプロジェクトのフォルダーレイアウトは次のとおりです。

ここに画像の説明を入力
現在、コントローラーまたはビューはありません。Owin Startupファイルだけ。


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プロジェクト には次の参照があります。

  1. Microsoft.Owin
  2. Microsoft.Owin.Host.SystemWeb
  3. オーウィン
  4. システム
  5. System.Core


更新: エラーメッセージを追加するのを忘れました:

ここに画像の説明を入力


今、

  1. なぜ機能しないのですか?
  2. Owin Startup非常に基本的なプロジェクト (へのアクセスなど) でクラスを追加して使用する段階的なプロセスはHome/Index何ですか?
  3. Owin Startupクラスの構成メソッドはいつ、どのように呼び出され、実行されますか?


更新: 2016 年 12 月 10 日

を確認してくださいProject-Folder-LayoutBootstrapperプロジェクトには次のファイルがあります :
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 BootstrapperStartupIocConfigStartup

4

3 に答える 3

10
  1. 空の Web アプリケーション プロジェクトを作成する
  2. NuGet を使用して OWIN をインストールします ( install-package Microsoft.Owin.Host.SystemWeb)
  3. "Startup.cs" という名前のプロジェクト ルートに空のクラスを追加します。

ここで、3 番目の質問にお答えします。スタートアップ クラスは 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 を使用する場合(「ホーム/インデックス」は MVC を意味すると思います)、次の手順に従います。

  1. MVC NuGet ( install-package Microsoft.AspNet.Mvc) をインストールします。
  2. プロジェクトに「Controllers」フォルダーを追加します。
  3. 新しい「Controlles」フォルダーの下に新しい空のコントローラーを作成し (右クリック -> 追加 -> MVC 5 コントローラー - 空)、「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 に答える