【问题标题】:ASP.NET Root Url Doesn't Resolve to Default.aspxASP.NET 根 URL 不解析为 Default.aspx
【发布时间】:2018-04-24 02:27:42
【问题描述】:

我有一个 asp.net 网站,最初加载时似乎无法解析为 Default.aspx。当我在本地机器上调试时,它加载默认没有问题。除非我尝试导航到“localhost:#####/”。然后它给出了404错误。当我将它部署到登台服务器时,给它一个虚拟路径“mywebapp”,然后从“mydomain.com/mywebapp”加载它,它也会给出 404。我已将 Default.aspx 设置为 IIS 中默认文档的列表顶部。如果我导航到“mydomain.com/mywebapp/default”,则站点加载正常。有什么建议?我会粘贴代码,但它是一个大型网站,老实说,我不确定我在寻找什么。

编辑: 在我的站点中,我还使用 DataTables 来显示和编辑数据。在 ajax 调用中,我以前可以使用以下 url 调用控制器:

api/MyController/idvalue

但自从发现这一点后,我不得不回过头来为网址添加前言以使它们起作用:

mywebapp/api/MyController/idvalue

控制器:

public class MyController : ApiController
{
    [Route("api/MyContoller/{idvalue}")]
    [HttpGet]
    [HttpPost]
    public IHttpActionResult MyControllerMethod(intidvalue)
    {
    }
}

WebApiConfig:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

RouteConfig:

 public static class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        var settings = new FriendlyUrlSettings();
        settings.AutoRedirectMode = RedirectMode.Permanent;
        routes.EnableFriendlyUrls(settings);

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

【问题讨论】:

  • 这是一个 MVC 还是常规的 webforms 网站?我问的原因是要知道您是否设置了路由器。您还尝试将默认页面添加到 web.config 吗? stackoverflow.com/questions/1913058/set-default-page-in-asp-net。您是否也尝试过 mydomain.com/mywebapp/ (末尾带有斜线)?
  • 是的,如果有意义的话,它不是。它主要是网络表单,但使用了 MVC 的某些方面。我也试过最后的斜线。那篇文章中的解决方案并没有解决它。我已经编辑了我的问题以记录其他有趣的事情

标签: asp.net iis web


【解决方案1】:

找到了解决方案。在我的 RouteConfig.cs 中,如果我注释掉该行:

controller = "Home",

效果很好。

public static class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        var settings = new FriendlyUrlSettings();
        settings.AutoRedirectMode = RedirectMode.Permanent;
        routes.EnableFriendlyUrls(settings);

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

但是,我不完全确定这是为什么。因此,如果有人能够向我解释,那就太好了!

【讨论】:

  • 这就是我问你是否有 MVC 路由器的原因。以前默认页面是由我们的 MVC 路由器设置的。您所做的最重要的“修复”是“破坏”默认路由。由于您不再指定默认控制器,因此 IIS 将告诉您哪个页面是您的新默认值。
  • 感谢您的解释。
猜你喜欢
  • 2020-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-02
  • 1970-01-01
相关资源
最近更新 更多