ASP .Net Core + Angular 2路由

时间:2016-03-24 23:30:28

标签: angular asp.net-core asp.net-routing

我有一个控制器返回部分视图,然后将其用作Angular 2 templateUrl。

例如:

角度组件:

 public class PartialsController : Controller
    {

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

控制器:

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

有没有办法以Angular 2仍然可以从控制器获取html的方式配置路由,但是在浏览器中手动键入地址(www.abc.com/partials/index)会返回默认值控制器或"未找到"而不是局部视图?

这是当前路线配置:

{{1}}

" angular" Angular路由需要路由才能使用浏览器中的复制粘贴地址。

1 个答案:

答案 0 :(得分: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();
    }
}