2015-07-31 27 views
6

Özel hata sayfaları içeren bir ASP.NET 5 MVC 6 uygulamasına sahibim. Şimdi /api yolu altında bir API denetleyicisi eklemek istiyorsanız, ben Harita yöntemi kullanarak aşağıdaki deseni gördük:Web API'sını ASP.NET 5 MVC 6 Uygulamasının İçinde Kullanma

public class Startup 
{ 
    public void Configure(IApplicationBuilder application) 
    { 
     application.Map("/api", ConfigureApi); 

     application.UseStatusCodePagesWithReExecute("/error/{0}"); 

     application.UseMvc(); 
    } 

    private void ConfigureApi(IApplicationBuilder application) 
    { 
     app.Run(async (context) => 
     { 
      await context.Response.WriteAsync("Hello World from API!"); 
     }); 
    } 
} 

Yukarıdaki kod /api yolu altında yepyeni ayrı bir uygulama oluşturur. Bu, Web API'niz için özel hata sayfaları istemediğinizden, ancak bunları MVC uygulamanız için istemediğiniz için harikadır.

ConfigureApi'de, MVC'yi tekrar eklemem gerektiğini düşünerek kontrol cihazlarını kullanabilir miyim? Ayrıca, özellikle bu alt uygulama için hizmetleri, seçenekleri ve filtreleri nasıl yapılandırabilirim? Bu alt uygulama için ConfigureServices(IServiceCollection services)'un bir yolu var mı? İşte

private void ConfigureApi(IApplicationBuilder app) 
{ 
    application.UseMvc(); 
} 

cevap

3

biraz uzantısı yöntemi "koşullu katman yürütme" etkinleştirerek yapabileceğini nasıl: Muhammed-rehan-saeed @

public class Startup { 
    public void Configure(IApplicationBuilder app) { 
     app.UseWhen(context => !context.Request.Path.StartsWithSegments(new PathString("/api")), branch => { 
      // Register the status code middleware, but only for non-API calls. 
      branch.UseStatusCodePagesWithReExecute("/error/{0}"); 
     }); 

     app.UseMvc(); 
    } 
} 


public static class AppBuilderExtensions { 
    public static IApplicationBuilder UseWhen(this IApplicationBuilder app, 
     Func<HttpContext, bool> condition, Action<IApplicationBuilder> configuration) { 
     if (app == null) { 
      throw new ArgumentNullException(nameof(app)); 
     } 

     if (condition == null) { 
      throw new ArgumentNullException(nameof(condition)); 
     } 

     if (configuration == null) { 
      throw new ArgumentNullException(nameof(configuration)); 
     } 

     var builder = app.New(); 
     configuration(builder); 

     return app.Use(next => { 
      builder.Run(next); 

      var branch = builder.Build(); 

      return context => { 
       if (condition(context)) { 
        return branch(context); 
       } 

       return next(context); 
      }; 
     }); 
    } 
} 
+0

Başarıyı bunu var mı? MVC 5 üzerinde de çalışmalı mı? – orad

+0

@orad, "UseWhen" in bir OWIN/Katana sürümünü arıyorsanız ayrı bir soru açmaya çekinmeyin. Bağlantıyı buradan paylaşın ve bir tane yayınlayacağım. – Pinpoint

İlgili konular