多个用户的路由

时间:2014-03-24 17:05:50

标签: asp.net asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing

我有一个网站xyz.com,用户正在设置管理员帐户,然后他们有其他用户在其下注册。他们将自己的帐户名称称为wisconsinsponsor。另一个用户设置了另一个名为iowasponsor的帐户。因此,我希望能够让用户浏览到xyz.com/wisconsinsponsorxyz.com/iowasponsor并进入这些用户设置的相应设置。

然后,在我浏览xyz.com/wisconsinsponsor之后,我将获得针对wisconsinsponsor的相应设置,我可以将其放到xyz.com/wisconsinsponsor/{controller}/{method}上。

所以我添加了以下代码。

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

    List<Sponsor> sponsors = new SponsorContext().Sponsors.ToList();

    foreach (Sponsor sponsor in sponsors)
    {
        // ALL THE PROPERTIES:
        // rentalProperties/
        routes.MapRoute(
            name: sponsor.SponsorName,
            url: sponsor.SponsorName + "{controller}/{action}/{id}",
            defaults: new
            {
                controller = "Home",
                action = "Index",
                id = sponsor.SponsorId
            }
        );
    }


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

所以主要目标是在没有登录的情况下,我可以获得与每个&#34;赞助商有关的信息。然后只是一般信息,如果用户前往&#39; xyz.com&#39;没有指定赞助商。以下是登陆主页的一点,但是当我导航到登录或任何其他视图时,我得到了例如&#39; xyz.com/ [我在数据库中的第一个赞助商条目] / admin / login& #39;而不是&#39; xyz.com/admin/login'。导航为什么不属于默认路由?

1 个答案:

答案 0 :(得分:0)

你可以简单地反转网址中的变量。

xyz.com/ {adminAccountVariable} / {控制器} / {方法}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace Example
{
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "admin",
                url: "{id}/RoutingConstraintExample/{action}/",
                defaults: new { controller = "RoutingConstraintExample", action = "Index", id = 0 },
                constraints: new { id = @"\d+" }
            );

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = 0 },
                constraints: new { id = @"\d+" }
            );

        }
    }
}

我认为应该处理这个问题。

Owin是一种更新的身份验证形式。使用安全性来限制对管理页面的访问。可以使用Owin或其他形式的安全性来识别登录的用户。使用标识的用户来控制管理页面中使用的设置。

http://www.asp.net/aspnet/overview/owin-and-katana/an-overview-of-project-katana

http://www.asp.net/vnext/overview/owin-and-katana

使用数据库保存管理员用户配置文件设置。这将用于跟踪与原始问题中显示的adminaccount和admin2account类似的配置文件子类型。 Controller和action将是相同的,但应用程序将根据数据库是否为登录到网站的人员返回adminaccount类型或admin2account类型来了解要显示的视图的哪些部分。