मैं एक मल्टी-टेनेंसी वेब साइट बना रहा हूं, जो क्लाइंट्स के लिए पेज होस्ट करती है। URL का पहला खंड एक स्ट्रिंग होगा जो क्लाइंट की पहचान करता है, जो निम्न URL रूटिंग योजना का उपयोग करके Global.asax में परिभाषित किया गया है:
"{client}/{controller}/{action}/{id}"
यह ठीक काम करता है, URLs जैसे / foo / Home / Index।
हालांकि, [अधिकृत] विशेषता का उपयोग करते समय, मैं एक लॉगिन पृष्ठ पर पुनर्निर्देशित करना चाहता हूं जो समान मैपिंग योजना का उपयोग करता है। इसलिए यदि ग्राहक foo है, तो लॉगिन पेज web.config में निर्धारित / अकाउंट / लॉगइन रीडायरेक्ट के बजाय / foo / Account / Login होगा।
MVC 401 अनधिकृत स्थिति को वापस करने के लिए एक HttpUnauthorizedResult का उपयोग करता है, जिसे मैं ASP.NET वेब में परिभाषित पृष्ठ पर पुनर्निर्देशित करता है।
तो क्या किसी को पता है कि ASP.NET लॉग इन रीडायरेक्ट व्यवहार को कैसे ओवरराइड करना है? या कस्टम प्राधिकरण विशेषता बनाकर MVC में पुनर्निर्देशित करना बेहतर होगा?
EDIT - उत्तर: .Net स्रोत में कुछ खुदाई के बाद, मैंने फैसला किया कि एक कस्टम प्रमाणीकरण विशेषता सबसे अच्छा समाधान है:
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 }
});
}
}
}