ASP.NET MVC应用程序,如何在Ipad上从Safari浏览器访问应用程序时进行路由

时间:2013-04-15 17:25:51

标签: asp.net-mvc safari

我们公司内部网上的Web应用程序使用Windows身份验证。如果通过Safari访问此应用程序,则Safari浏览器不支持Windows身份验证。

我没有此应用程序的签名/登录页面,但如果通过Safari浏览器访问该应用程序,我似乎必须创建一个。我可以创建身份验证页面,我需要了解,如何检测用户是一个safari用户并路由到一个视图,这将使用户能够添加他们的网络凭据进行身份验证。

提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以使用显示模式功能,并创建仅适用于iPad的显示模式。要检测iPad,use this technique。使用this technique创建自定义移动显示模式,从DefaultDisplayMode继承并提供ContextCondition。

我为Opera Mobile模拟器做了这个,你所要做的就是调整它以检查iPad(在第一个链接中)。

public class OperaMobiDisplayMode : DefaultDisplayMode
{
    public OperaMobiDisplayMode()
        : base("Mobile")
    {
        ContextCondition = (context => IsMobile(context.GetOverriddenUserAgent()));
    }
}

答案 1 :(得分:1)

您可以根据其正在使用的用户代理重定向。 您可以使用路由约束来执行此操作。

例如,您应该创建一个检查用户代理的自定义约束。 要创建路由约束,您需要创建一个实现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")}); 
}