2015-03-24 2 views
4

Я создал пустой проект, чтобы создать угловое приложение. Теперь у меня есть все это на месте, я решил, что хочу добавить веб-API в этот проект. Я установил все необходимые пакеты и установил файл WebApiConfig.cs. Затем я установил OWIN и создал OWIN стартовый класс. Когда я запускаю свой проект, OWIN Startup Class вызывается правильно, но WebApiConfig нет..Net OWIN WebApiConfig не называется

В прошлом (пре-Owin) с использованием Global.asax был, как вы произвели все классы конфигурации, но так как я использую Owinglobal.asax файл не нужен, и поэтому я никогда не создавал Это.

Кто-нибудь сталкивался с этим раньше и знает, что я делаю неправильно?

Update 1

Я добавил страницу Global.asax и казнены. У меня создалось впечатление, что если вы используете OWIN, вы должны удалить свой файл Global.asax?

Вот как Global.asax файл

public class Global : HttpApplication 
{ 

    protected void Application_Start() 
    { 
     // Add these two lines to initialize Routes and Filters: 
     WebApiConfig.Register(GlobalConfiguration.Configuration); 
    } 
} 

и файл Startup.Config.

public class StartupConfig 
{ 
    public static UserService<User> UserService { get; set; } 
    public static string PublicClientId { get; private set; } 
    public static OAuthAuthorizationServerOptions OAuthOptions { get; private set; } 

    static StartupConfig() 
    { 
     UserService = new UserService<User>(new UnitOfWork<DatabaseContext>(), false, true); 
     PublicClientId = "self"; 

     OAuthOptions = new OAuthAuthorizationServerOptions 
     { 
      TokenEndpointPath = new PathString("/Token"), 
      Provider = new OAuthProvider<User>(PublicClientId, UserService), 
      AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"), 
      AccessTokenExpireTimeSpan = TimeSpan.FromDays(14), 
      AllowInsecureHttp = true 
     }; 
    } 

    // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864 
    public void Configuration(IAppBuilder app) 
    { 
     // Enable the application to use a cookie to store information for the signed in user 
     // and to use a cookie to temporarily store information about a user logging in with a third party login provider 
     app.UseCookieAuthentication(new CookieAuthenticationOptions()); 
     app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); 

     // Enable the application to use bearer tokens to authenticate users 
     app.UseOAuthBearerTokens(OAuthOptions); 

     // Uncomment the following lines to enable logging in with third party login providers 
     //app.UseMicrosoftAccountAuthentication(
     // clientId: "", 
     // clientSecret: ""); 

     //app.UseTwitterAuthentication(
     // consumerKey: "vnaJZLYwWFbv7GBlDeMbfwAlD", 
     // consumerSecret: "Q1FE1hEN6prXnK2O9TYihTFyOQmcQmrZJses0rT8Au4OsDQISQ"); 

     //app.UseFacebookAuthentication(
     // appId: "", 
     // appSecret: ""); 

     //app.UseGoogleAuthentication(); 
    } 
} 

Update 2

Мой класс запуска будет выглядеть так:

public class StartupConfig 
{ 
    public static UserService<User> UserService { get; set; } 
    public static string PublicClientId { get; private set; } 
    public static OAuthAuthorizationServerOptions OAuthOptions { get; private set; } 

    static StartupConfig() 
    { 
     UserService = new UserService<User>(new UnitOfWork<DatabaseContext>(), false, true); 
     PublicClientId = "self"; 

     OAuthOptions = new OAuthAuthorizationServerOptions 
     { 
      TokenEndpointPath = new PathString("/Token"), 
      Provider = new OAuthProvider<User>(PublicClientId, UserService), 
      AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"), 
      AccessTokenExpireTimeSpan = TimeSpan.FromDays(14), 
      AllowInsecureHttp = true 
     }; 
    } 

    // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864 
    public void Configuration(IAppBuilder app) 
    { 
     //var config = new HttpConfiguration(); 

     //// Set up our configuration 
     //WebApiConfig.Register(config); 

     // Enable the application to use a cookie to store information for the signed in user 
     // and to use a cookie to temporarily store information about a user logging in with a third party login provider 
     app.UseCookieAuthentication(new CookieAuthenticationOptions()); 
     app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); 

     // Enable the application to use bearer tokens to authenticate users 
     app.UseOAuthBearerTokens(OAuthOptions); 

     // Uncomment the following lines to enable logging in with third party login providers 
     //app.UseMicrosoftAccountAuthentication(
     // clientId: "", 
     // clientSecret: ""); 

     //app.UseTwitterAuthentication(
     // consumerKey: "vnaJZLYwWFbv7GBlDeMbfwAlD", 
     // consumerSecret: "Q1FE1hEN6prXnK2O9TYihTFyOQmcQmrZJses0rT8Au4OsDQISQ"); 

     //app.UseFacebookAuthentication(
     // appId: "", 
     // appSecret: ""); 

     //app.UseGoogleAuthentication(); 
    } 
} 

Если я раскомментировать WebApiConfig линию, то класс запуска никогда не выполняется. Любая идея, почему?

+0

Опубликовать код из вашего глобального asax.cs и вашего стартапа. cs - без этого все, что вы получите, это догадки. – Jamiec

+0

Я обновил свой вопрос – r3plica

ответ

5

Вам потребуется вызвать app.UseWebApi в вашем классе запуска, передав конфигурацию, которую вы хотите использовать. Вам также нужно будет вызвать свой метод регистрации WebApiConfig. Пример того, как это может выглядеть в срубить приложения:

Вы могли бы иметь класс запуска Owin, который выглядит примерно так:

// Tell OWIN to start with this 
[assembly: OwinStartup(typeof(MyWebApi.Startup))] 
namespace MyWebApi 
{ 
    public class Startup 
    { 
     /// <summary> 
     /// This method gets called automatically by OWIN when the application starts, it will pass in the IAppBuilder instance. 
     /// The WebApi is registered here and one of the built in shortcuts for using the WebApi is called to initialise it. 
     /// </summary> 
     public void Configuration(IAppBuilder app) 
     { 
      var config = new HttpConfiguration(); 
      WebApiConfig.Register(config); 
      app.UseWebApi(config); 
     } 
    } 
} 

HttpConfiguration создается и передается методу WebApiConfig.Register. Затем мы используем метод app.UseWebApi(config) для настройки веб-api.Это вспомогательный метод в System.Web.Http.Owin, вы можете получить его, включая пакет NuGet Microsoft ASP.NET Web API 2.2 OWIN

Класс WebApiConfig будет выглядеть примерно так:

namespace MyWebApi 
{ 
    public static class WebApiConfig 
    { 
     public static void Register(HttpConfiguration config) 
     { 
      // Web API routes 
      config.MapHttpAttributeRoutes(); 

      config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/{id}", 
       defaults: new { id = RouteParameter.Optional } 
      ); 
     } 
    } 
} 
+0

IAppBuilder не содержит определения для UseWebApi: o – r3plica

+1

пришлось использовать nuget для импорта OWIN.SelfHost – r3plica

+0

Вы можете получить его, включив NuGet пакет 'Microsoft ASP.NET Web API 2.2 OWIN' –

1

Конечно, если вы используете Owin, вы можете удалить файл Global.asax.

В вашем Owin Startup.cs вы должны разместить свою регистрацию WebApiConfig.

public class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     ... 

     HttpConfiguration config = new HttpConfiguration(); 

     WebApiConfig.Register(config); 
     config.Filters.Add(new WebApiAuthorizeAttribute()); 

     ... 

    } 
... 
} 
+0

Я обновил свой вопрос: o он не совсем работает – r3plica

Смежные вопросы