ASP .Net Core + Angular 2 路由
ASP .Net Core + Angular 2 routing
我有一个 returns 部分视图的控制器,然后用作 Angular 2 templateUrl。
例如:
Angular分量:
@Component({
selector: 'my-app',
templateUrl:'/partials/index',
控制器:
public class PartialsController : Controller
{
public IActionResult Index()
{
return PartialView();
}
}
有没有办法配置路由,使 Angular 2 仍然可以从控制器获取 html,但在浏览器中手动输入地址(www.abc.com/partials/index) returns 是默认控制器还是 "not found" 而不是部分视图?
这是当前路由配置:
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 路由才能使用来自浏览器的复制粘贴地址。
您可以编写一个动作过滤器来处理这种情况。
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();
}
}
我有一个 returns 部分视图的控制器,然后用作 Angular 2 templateUrl。
例如:
Angular分量:
@Component({
selector: 'my-app',
templateUrl:'/partials/index',
控制器:
public class PartialsController : Controller
{
public IActionResult Index()
{
return PartialView();
}
}
有没有办法配置路由,使 Angular 2 仍然可以从控制器获取 html,但在浏览器中手动输入地址(www.abc.com/partials/index) returns 是默认控制器还是 "not found" 而不是部分视图?
这是当前路由配置:
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 路由才能使用来自浏览器的复制粘贴地址。
您可以编写一个动作过滤器来处理这种情况。
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();
}
}