2016-03-24 222 views
0

我有一個控制器,返回部分視圖,然後用作Angular 2 templateUrl。ASP .Net Core + Angular 2路由

例如:

角度成分:

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

控制器:

public class PartialsController : Controller 
    { 

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

是否有配置,使得角2仍然可以得到的HTML路由的方式從控制器,但在瀏覽器中手動輸入地址(www.abc.com/partials/index)會返回默認控制器或「未找到」而不是部分視圖?

這是當前路由配置:需要

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" } 
       ); 
      }); 

的「角」路線角路由從瀏覽器的複製粘貼地址有效。

回答

0

您可以編寫一個操作過濾器來處理這種情況。

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

這確實會停止直接瀏覽器鏈接,但不幸的是角度也無法獲得html。 –

+1

編輯完成後,此作品完美無缺。謝謝。 –