ASP.net MVC 5 路由:加载基本 url 时出现 ajax 错误,但在最后添加 home/Index 时有效

Posted

技术标签:

【中文标题】ASP.net MVC 5 路由:加载基本 url 时出现 ajax 错误,但在最后添加 home/Index 时有效【英文标题】:ASP.net MVC 5 routing: ajax error on loading base url but works when adding home/Index on the end 【发布时间】:2019-06-25 20:33:28 【问题描述】:

如果最后没有 /Home,我的项目的基本 url 将无法工作,它会返回一个 ajax 错误。如何确保在没有 Home/Index 的情况下输入基本 url,它会在不返回错误的情况下工作?

我可以看到在服务器端 GetTaskLog 正在返回 404 not found 错误。 GetTaskLog 是我的家庭控制器中的一个函数,用于从数据库中检索数据。当我将 /home 添加到 url 时,GetTaskLog 工作正常。它检索数据并且没有错误。

public static void RegisterRoutes(RouteCollection routes)
    
        routes.IgnoreRoute("resource.axd/*pathInfo");

    routes.MapRoute(
            name: "Default",
            url: "controller/action/id",
            defaults: new  controller = "Home", action = "Index", id = UrlParameter.Optional 
        );
    

阿贾克斯:

"ajax": 
            "url": "../Home/GetTaskLog",
            "type": 'POST',
            "content-type": "application/json; charset=utf-8",
            "processData": false,
            "dataType": "json",
            "headers": "headers",
            "data": "window.JSON.stringify(obj)",

$('input[name=__RequestVerificationToken]').val() , “传统”:是的, “dataSrc”:函数(数据) 返回 JSON.parse(data); , ,

【问题讨论】:

请指定您调用 AJAX 请求的错误详细信息和库,因为 AJAX 似乎是从 DataTables 或使用 "ajax" 作为选项参数的类似库请求的。 错误只是说 ajax 错误,没有进一步的细节。但是我可以看到在服务器端 GetTaskLog 正在返回 404 not found 错误。 GetTaskLog 是我的家庭控制器中的一个函数,用于从数据库中检索数据。当我将 /home 添加到 url 时,GetTaskLog 工作正常。它检索数据并且没有错误 【参考方案1】:

route.MapRoute 中的默认值表示如果应用程序在 url 上没有 controller/action/id 之类的内容,它将返回到 Home/Index。 所以你需要更改默认参数

【讨论】:

将默认值更改为空字符串还是干脆去掉默认值行? @JoeJoeJoe,您可以去掉默认行,在这种情况下,如果找不到 url,您的应用程序将返回 404 错误。但是您可以将默认值更改为任何其他 url,例如 MyApp/ShowNotFound 如果您希望人们被重定向到此 url,以防他们请求不存在的 url 对不起,我不明白。我不确定我应该怎么做才能使基本 url 正常工作而不在末尾添加 home/index。基本网址确实打开了默认页面,但我收到了一个 ajax 错误。 您不需要每次都使用 Home/Index。创建新的Controller,让它成为BookController。在 BookController 动作方法 Add 中创建并在 Add 中添加一些逻辑;例如 Add 可以返回字符串“hello”。现在我们有路线预订/添加;在浏览器中打开这个网址,你会看到“你好”这个词。部分“控制器”为了美而切入 url(平台自动执行)。【参考方案2】:

我的问题的解决方案是将ajax url更改为:

 "ajax": 
             "url": "/WTM/Home/GetTaskLog"
         

【讨论】:

以上是关于ASP.net MVC 5 路由:加载基本 url 时出现 ajax 错误,但在最后添加 home/Index 时有效的主要内容,如果未能解决你的问题,请参考以下文章

路由和 url 中的 ASP.NET MVC 5 文化

asp.net core 系列 5 MVC框架路由(上)

asp.net core mvc razor page css未在特定路由上加载

如何在 ASP.NET CORE 5.0 MVC 中将登录设置为默认路由

csharp asp.net mvc路由的绝对URL

跟我学ASP.NET MVC之十一:URL路由