我们公司 Intranet 上的我的 Web 应用程序使用 Windows 身份验证。如果通过 Safari 访问此应用程序,则 safari 浏览器不支持 windows 身份验证。
我没有此应用程序的登录/登录页面,但如果通过 Safari 浏览器访问该应用程序,我似乎必须创建一个。我可以创建身份验证页面,我需要了解,我如何检测用户是 safari 用户并路由到允许用户添加其网络凭据以进行身份验证的视图。
提前致谢。
我们公司 Intranet 上的我的 Web 应用程序使用 Windows 身份验证。如果通过 Safari 访问此应用程序,则 safari 浏览器不支持 windows 身份验证。
我没有此应用程序的登录/登录页面,但如果通过 Safari 浏览器访问该应用程序,我似乎必须创建一个。我可以创建身份验证页面,我需要了解,我如何检测用户是 safari 用户并路由到允许用户添加其网络凭据以进行身份验证的视图。
提前致谢。
您可以根据其正在使用的用户代理进行重定向。您可以使用路线约束来执行此操作。
例如,您应该创建一个自定义约束来检查用户代理。要创建路由约束,您需要创建一个实现 IRouteConstraint 的类
public class UserAgentConstraint : IRouteConstraint
{
private string _userAgent;
public UserAgentConstraint(string userAgentParam)
{
_userAgent= userAgentParam;
}
public bool Match(HttpContextBase httpContext, Route route, string parameterName,
RouteValueDictionary values, RouteDirection routeDirection)
{
return httpContext.Request.UserAgent != null &&
httpContext.Request.UserAgent.Contains(_userAgent);
}
}
然后将此约束应用于您需要的路由并将请求发送到您不需要的控制器/操作,例如:
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapRoute("MyRoute", "{controller}/{action}",
new { controller = "Home", action = "LoginForIPad",
httpMethod = new UserAgentConstraint("iPad")});
}
您可以使用显示模式功能,并创建仅适用于 iPad 的显示模式。要检测 iPad,请使用此技术。使用此技术创建自定义移动显示模式,您从 DefaultDisplayMode 继承并提供 ContextCondition。
我为 Opera Mobile 模拟器做了这个,你所要做的就是调整它以检查 iPad(在第一个链接中)。
public class OperaMobiDisplayMode : DefaultDisplayMode
{
public OperaMobiDisplayMode()
: base("Mobile")
{
ContextCondition = (context => IsMobile(context.GetOverriddenUserAgent()));
}
}