我有一个自定义模块,它使用Routes.cs和AdminController.cs文件来定义新的url路由和要执行的操作,但只有当用户登录时才能访问它
<location path="/speedbump">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
这两种方法似乎都不起作用。我该如何确保该网站的所有用户/访问者都可以访问该url,而不仅仅是那些登录的用户/访问者?非常感谢。
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);
}
}
}
}
不要使用AdminController
,创建另一个名为AnythingelseController
的控制器。管理员控制器是为管理员的东西。它基本上将Admin筛选器添加到该控制器中,因此尝试访问该控制器中的操作的用户需要AccessAdminPanel权限。
如果您希望该控制器中的某些页面是admin,而某些页面是匿名主题页面,请创建控制器MyController
,然后用[Admin]
装饰admin方法,用[Themed]
装饰匿名主题方法。