控制器为每个页面请求收到2个请求

时间:2019-04-28 10:10:43

标签: javascript c# asp.net-mvc asp.net-core routes

我已经在Dot Net Core应用程序中修改了Map Route,对于每个请求都将其发送给一个控制器,因此我们构建的每个页面都不需要很多控制器或Action Result。

greedy Routing

routes.MapRoute("", "/{*article}",
defaults: new { controller = "Pages", action = "Killme" });

在Page Controller中构建一个具有CSS和JavaScript位置列表的对象,该对象将传递给Page视图

public IActionResult Killme()
{   
 var PageInfo = GetPage_Data();
 ViewBag.PageInfo = t;
 return View("Pages");
}

,并且我试图将此信息作为模型或视图包传递给Page视图。 在页面视图中,我尝试基于

之类的模型动态构建JavaScript和CSS
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    @{
    RootObject PageInfo = ViewBag.PageInfo;
    foreach (var JavaScript in PageInfo.js)
    {
        var JSsrc = JavaScript.src;
      <script type="text/javascript" src="@JSsrc "> 
                 </script>        

    }
        <script type="text/javascript" src=""></script>
    </head>
    <body>

    </body>
</html>

现在的问题是,当我构建JavaScript时,当我注释

时,控制器被调用2次,页面被呈现2次。
 <script type="text/javascript" src="@JSsrc "> 
                     </script> 

页面控制器将被调用一次,

关于此事发生的原因以及我在做什么错的任何帮助,都将受到感谢

1 个答案:

答案 0 :(得分:1)

此行为的原因是未配置staticFileHandler或无法找到您的Javascript文件,无法将请求进一步传递到管道中。 MVC处理程序捕获所有请求(由于您的路由),因此再次返回同一页面。

首先请检查您的启动类在mvcHandler之前是否使用staticFileHandler,如下所示:

public class Startup
{
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseStaticFiles();
        ..
        app.UseMvc();
    }
}

其次,确保将Javascript放在wwwroot内并使用正确的路径。因此, wwwroot / js / mysite.js 之类的文件应使用如下脚本标记:

<script src="/js/mysite.js"></script>

这些改进应该可以解决您的问题。