【问题标题】:ASP .Net Core + Angular 2 routingASP .Net Core + Angular 2 路由
【发布时间】:2016-03-24 23:30:28
【问题描述】:

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

例如:

角度组件:

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

控制器:

 public class PartialsController : Controller
    {

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

有没有办法以这样的方式配置路由,Angular 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" }
                 );
            }); 

Angular 路由需要“角度”路由才能处理来自浏览器的复制粘贴地址。

【问题讨论】:

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


    【解决方案1】:

    您可以编写一个动作过滤器来处理这种情况。

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

    【讨论】:

    • 这确实会停止直接浏览器链接,但不幸的是 angular 也无法获取 html。
    猜你喜欢
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 2018-03-27
    • 2017-04-22
    • 1970-01-01
    • 2020-10-13
    • 2019-03-23
    相关资源
    最近更新 更多