我可以使用Route.Config
文件对我的MVC应用程序进行URL重写,如下所示:
//Offline Consult Route
routes.MapRoute(
name: "WrittenStep2",
url: "written/step2/{id}",
defaults: new { controller = "Offline", action = "Step2", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Written",
url: "written",
defaults: new { controller = "Offline", action = "Index" }
);
在上面的代码中,我将Controller作为"离线"并采取一些行动。
我可以改变路线:
TO: www.abc.com/written
FROM www.abc.com/Offline
我的问题是我仍然可以访问该网址:www.abc.com/Offline。我该如何解决这个问题?
我尝试使用Begin_Request
文件的Global.asax
方法拒绝向用户访问此网址。
但是在这样做之后,我无法访问我使用jQuery Ajax调用的方法。
$.ajax({
type: "POST",
url: "/Offline/HelloWorld",
data: jsonString,
contentType: "application/json",
...
有没有办法限制用户使用相同的网址?
答案 0 :(得分:1)
试试this,它可能对您有所帮助 ... 对于给定示例,如果要限制或导航特定URL的用户,可以尝试:
1-包括使用自定义路由处理程序离线的路由
routes.MapRoute(
"OfflineWithoutParameterRoute",
"Offline"
).RouteHandler = new NewUrlRouteHandler();
routes.MapRoute(
name: "WrittenStep2",
url: "written/step2/{id}",
defaults: new { controller = "Offline", action = "Step2", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Written",
url: "written",
defaults: new { controller = "Offline", action = "Index" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
2-创建您的MvcRouteHandler
public class NewUrlRouteHandler : System.Web.Mvc.MvcRouteHandler
{
protected override IHttpHandler GetHttpHandler(System.Web.Routing.RequestContext requestContext)
{
//restrict or navigate to any destination
requestContext.RouteData.Values["controller"] = "Home";
requestContext.RouteData.Values["action"] = "index";
return base.GetHttpHandler(requestContext);
}
}
你可以保持任何方法
因此 www.abc.com/Offline 的任何匹配都会触及自定义处理程序, www.abc.com/Offline/prm 的任何路径都将遵循默认值路由。
我尝试过您给出的控制器/动作作为示例,它应该对您有所帮助。
public class OfflineController : Controller
{
// GET: Offline
public ActionResult Index()
{
return View();
}
public ActionResult Step2(int id)
{
return View();
}
public ActionResult HelloWorld(int id)
{
return View();
}
}