允许匿名用户访问Orchard CMS中的特定URL

时间:2014-09-02 22:50:57

标签: c# asp.net-mvc orchardcms

我有一个自定义模块,它使用Routes.cs和AdminController.cs文件来定义新的URL路由和要采取的操作,但只能在用户登录时访问。我尝试添加[Authorize] ]和AdminController.cs文件中的[AllowAnonymous]属性,我尝试在Web.config文件中包含以下内容:

 <location path="/speedbump">
    <system.web>
      <authorization>
        <allow users="?"/>
      </authorization>
    </system.web>
  </location>

这些方法似乎都不起作用。我如何确保网站的所有用户/访问者都可以访问此网址,而不仅仅是那些登录的用户?谢谢。

Routes.cs文件:

public class Routes : IRouteProvider
    {
        public void GetRoutes(ICollection<RouteDescriptor> routes)
        {
            foreach (var routeDescriptor in GetRoutes())
                routes.Add(routeDescriptor);
        }

        public IEnumerable<RouteDescriptor> GetRoutes()
        {
            return new[] {
                new RouteDescriptor {
                    Priority = 15,
                    Route = new Route(
                        "speedbump",
                        new RouteValueDictionary {
                            {"area", "Speedbump"},
                            {"controller", "Admin"},
                            {"action", "isValidURL"}
                        },
                        new RouteValueDictionary(),
                        new RouteValueDictionary {
                            {"area", "Speedbump"}
                        },
                        new MvcRouteHandler())
                }
            };
        }
    }

AdminController.cs文件:

[Authorize]
    public class AdminController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        [AllowAnonymous]
        public void isValidURL()
        {
            string requestedURL = Request.QueryString["url"];
            //Create a list of strings to contain all the "valid" URLs
            var whiteList = new List<string>();
            //Add URLs to the list
            whiteList.Add("www.google.com");

            foreach (string validURL in whiteList)
            {
                if (requestedURL == validURL)
                {
                    Response.Write("Speedbump");
                    //Response.Redirect(requestedURL);

                }
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

不要使用AdminController,创建另一个名为AnythingelseController的控制器。管理员控制器是管理员的东西。它基本上将Admin过滤器添加到该控制器,以便尝试访问该控制器中的操作的用户需要AccessAdminPanel权限。

如果您希望该控制器中的某些页面为admin,而某些页面为匿名主题页面,则创建控制器MyController,然后使用[Admin]和匿名主题方法[Themed]修饰管理方法。