Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs在.NETMVC中路由HTML5模式直接url_Angularjs_Asp.net Mvc_Routing - Fatal编程技术网

Angularjs在.NETMVC中路由HTML5模式直接url

Angularjs在.NETMVC中路由HTML5模式直接url,angularjs,asp.net-mvc,routing,Angularjs,Asp.net Mvc,Routing,我已经看到了几个类似的问题/答案,但我似乎仍然遗漏了一些东西。在我刷新页面或直接转到URL之前,一切正常 我可以使用404,也可以在mvc中创建相同的url,但它只在刷新时提供部分url,不包括布局页面 有几个人建议将MVC路由更改为: routes.MapRoute( name: "Application", url: "{*url}", defaults: new { controller = "Home", action = "Index" } ); 当这被实现时

我已经看到了几个类似的问题/答案,但我似乎仍然遗漏了一些东西。在我刷新页面或直接转到URL之前,一切正常

我可以使用404,也可以在mvc中创建相同的url,但它只在刷新时提供部分url,不包括布局页面

有几个人建议将MVC路由更改为:

routes.MapRoute(
    name: "Application",
    url: "{*url}",
    defaults: new { controller = "Home", action = "Index" }
);
当这被实现时,这意味着我不能正常访问站点上的任何其他URL,除非我遗漏了什么,否则基本上所有内容都必须放入RESTAPI或为每个URL编写自定义路由。两个听起来都不太好


那么,我怎样才能拥有一个带有angularjs的html5 url(在有效的浏览器中没有哈希标记),并且能够浏览到例如Home/About或Home,然后单击About的链接,让它们在相同的基本布局页面上显示相同的内容呢?

这可能不是最好的答案,因此如果有人有更好的想法,请发表评论,否则这可能会帮助其他人

我意识到MVCAJAX指令没有检测到角度调用,所以我无法自动化这一方面

所以在我看来

.when('/Home/Contact', {
    templateUrl: '/Home/NgContact'
在我的MVC控制器中,我有两个actionresults:

public ActionResult NgContact(){
    ViewBag.IsFromNg = 1;
    return Contact();
 }
 public ActionResult Contact() {
    return View("Contact"); //have to type in name, may look for NgContact.cshtml
 }
最后,关于这些可能称之为的任何观点,我提出:

@if (ViewBag.IsFromNg == 1){ Layout = null; }

因此,每个Actionresult都有两个副本,一个用于整页加载,一个用于任何调用,但每个都只有3行额外的内容

我想这就是你要找的,看起来是一样的。重新路由所有请求。不想对所有事情都使用API调用似乎比我想象的更具挑战性。我正在考虑在MVC中编写一个过滤器来重新路由所有非ajax请求,但也许有更好的方法。