【问题标题】:Do I need a default document on IIS for an MVC application?对于 MVC 应用程序,我是否需要 IIS 上的默认文档?
【发布时间】:2018-08-29 04:22:05
【问题描述】:

为什么在为我的 MVC 网站创建 Web 应用程序时,我应该在我的 IIS 配置中创建一个默认文档,并且名称是自定义的,例如 Login.cshtml

我认为通过 MVC 路由不需要在 IIS 上定义任何默认文档。还是我们假设每个控制器下都有一个index.cshtml 页面?

【问题讨论】:

    标签: c# asp.net-mvc model-view-controller asp.net-mvc-routing iis-8


    【解决方案1】:

    视图由 MVC 提供,而不是由 IIS 提供。 MVC 是控制哪个 URL 映射到哪个动作方法的,它是返回视图的动作方法。

    只要MVC中有一个路由可以服务于URL“”(默认http://example.com/路径),那么就不需要在IIS中映射一个默认文档。请注意,Visual Studio MVC 模板中的 Default 路由会处理这种情况,因此只要您不更改它,您就会被覆盖。

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

    另外,将Login 设为默认页面非常不寻常。如果您希望整个站点只能通过登录访问,请将AuthorizeAttribute 注册为全局过滤器。

    public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new AuthorizeAttribute());
            filters.Add(new HandleErrorAttribute());
        }
    }
    

    当与启动时的正确配置结合使用时,这可确保在网站中访问的任何页面都会将请求重定向到登录页面,并在他们登录时重定向回所请求的页面。这样当用户登录时,“默认”页面并不总是登录页面(这在用户登录时没有多大意义)。

    【讨论】:

    • 我确实有如下默认路由:\n routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } //action 默认 Index 更改为 LogIn );
    • 我要加载的默认页面名为 Login.cshtml,位于我的 View Home 文件夹下。我有一个控制器主页,并且动作索引应该加载这个视图。我还需要在 IIS 上定义默认文档吗?
    • 不,没有理由使用默认文档。正如我所说,将您的默认操作设置为登录页面并不是很实际。您真的希望用户在已经登录时默认转到登录页面吗?如果没有,请使用我提到的AuthorizeAttribute
    猜你喜欢
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多