2016-03-24 19 views
0

Ich habe einen Controller, der Teilansichten zurückgibt, die dann als Angular 2 templateUrl verwendet werden.ASP.Net Core + Winkel 2 Routing

Beispiel:

Angular Komponente:

@Component({ 
    selector: 'my-app', 
    templateUrl:'/partials/index', 

Controller:

public class PartialsController : Controller 
    { 

     public IActionResult Index() 
     { 
      return PartialView(); 
     } 
    } 

Gibt es eine Möglichkeit, die Routen so zu konfigurieren, dass Angular 2 noch die HTML bekommen vom Controller, aber die Adresse in einem Browser manuell eingeben (www.abc.com/partials/index) gibt entweder den Standardcontroller oder "nicht gefunden" statt der Teilansicht zurück?

Dies ist die aktuelle Route config:

app.UseMvc(config => 
      { 
       config.MapRoute(
        name: "Default", 
        template: "{controller}/{action}/{id?}", 
        defaults: new { controller = "Home", action = "Index" } 
       ); 
       config.MapRoute(
       name: "angular", 
       template: "{*anything}", 
       defaults: new { controller = "Home", action = "Index" } 
       ); 
      }); 

Die "Winkel" Route ist für Angular-Routing benötigt mit Kopie-Einfügen von Adressen aus dem Browser zu arbeiten.

Antwort

0

Sie können einen Aktionsfilter schreiben, um die Situation zu behandeln.

public class OnlyAjaxAttribute : ActionFilterAttribute 
{ 
    public OnlyAjaxAttribute() 
    { 

    } 
    public override void OnActionExecuting(ActionExecutingContext context) 
    { 
     var accepts = context.HttpContext.Request.Headers["Accept"].ToString(); 
     if (accepts.Contains("text/html")) 
     { 
      context.Result = new HttpStatusCodeResult(404); 
     } 
     base.OnActionExecuting(context); 
    } 
} 
[OnlyAjax] 
public class PartialsController : Controller 
{ 

    public IActionResult Index() 
    { 
     return PartialView(); 
    } 
} 
+0

Dies stoppt direkte Browser-Links, aber leider kantig kann nicht das HTML auch nicht. –

+1

Nach der Bearbeitung funktioniert das perfekt. Vielen Dank. –