Tôi đang tạo trang web nhiều người thuê nhà lưu trữ các trang cho khách hàng. Các phân đoạn đầu tiên của URL sẽ là một chuỗi trong đó xác định các khách hàng, quy định tại Global.asax sử dụng thức truy cập URL định tuyến sau:Cách chuyển hướng đến URL đăng nhập động trong ASP.NET MVC
"{client}/{controller}/{action}/{id}"
này hoạt động tốt, với URL như/foo/Home/Index.
Tuy nhiên, khi sử dụng thuộc tính [Ủy quyền], tôi muốn chuyển hướng đến trang đăng nhập cũng sử dụng cùng một lược đồ ánh xạ. Vì vậy, nếu khách hàng là foo, trang đăng nhập sẽ là/foo/Tài khoản/Đăng nhập thay vì chuyển hướng/Tài khoản/Đăng nhập cố định được xác định trong web.config.
MVC sử dụng HttpUnauthorizedResult để trả lại trạng thái không được phép 401, mà tôi cho là nguyên nhân ASP.NET chuyển hướng đến trang được xác định trong web.config.
Vì vậy, có ai biết cách ghi đè hành vi chuyển hướng đăng nhập ASP.NET không? Hoặc nó sẽ là tốt hơn để chuyển hướng trong MVC bằng cách tạo một thuộc tính ủy quyền tùy chỉnh?
EDIT - Trả lời: sau khi một số đào vào nguồn Net, tôi quyết định rằng một thuộc tính xác thực tùy chỉnh là giải pháp tốt nhất:
public class ClientAuthorizeAttribute: AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
if (filterContext.Cancel && filterContext.Result is HttpUnauthorizedResult)
{
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
{
{ "client", filterContext.RouteData.Values[ "client" ] },
{ "controller", "Account" },
{ "action", "Login" },
{ "ReturnUrl", filterContext.HttpContext.Request.RawUrl }
});
}
}
}
làm gần như chính xác những điều tương tự với định tuyến, vì vậy tôi cần thiết này! Cảm ơn! –
Cảm ơn, tôi đã cố gắng tìm ra cách để làm một cái gì đó tương tự. – Chance
nó đã cho tôi ý tưởng để thực hiện riêng, cảm ơn rất nhiều! –