【问题标题】:Passing parameters in URL ASP.NET在 URL ASP.NET 中传递参数
【发布时间】:2015-08-25 23:09:51
【问题描述】:

我正在创建一个ASP.NET MVC 应用程序,它将显示在WindowsPhoneiOSAndroid 等客户端中的WebView 控件中或iFramed 中的其他网站中。我想根据请求我的站点的客户端,为我的 ASP.NET 应用程序以不同的方式控制一些行为和样式。

实现此目的的一种方法是通过 ClientType=WindowsPhone 等标头传递此信息,并在需要的地方读取标头值。但我在想是否有一种干净的方式可以在 URL 中传递这些信息。像

https://www.example.com/windowsphone/Manage/Index
https://www.example.com/ios/Manage/Index

并从我的代码中需要的 URL 读取客户端类型。 如果RouteConfig 可以在这里帮助我,我很困惑。

【问题讨论】:

  • 简而言之,是的,它可以,你有什么具体问题?
  • 这不是更清洁或 IMO 首选的方式。首选方法是根据屏幕大小更改视图。如果数据会发生变化并且希望在移动设备上发生更少的事情,那么只需检测设备是否是移动设备就可以正常工作
  • 为什么windows phone 的视图与android 手机或iPhone 完全不同?如果有充分的理由,那当然可以做到,但 IMO 不应该通过 url 到不同的视图来完成。
  • 我的网站显示为 windows phone 应用程序、iOS 应用程序和 Android 应用程序的一部分,并且想要使用不同的 css 以与相应的应用程序样式保持一致。

标签: asp.net asp.net-mvc routes


【解决方案1】:

我可以通过以下方式做到这一点,

routes.MapRoute(
   name: "Default",
   url: "{clientType}/{controller}/{action}",
   defaults: new { controller = "Home", action = "Index" },
   constraints: new { clientType = new ClientTypeConstraint() });

我的 ClientTypeConstraint 如下所示

public class ClientTypeConstraint : IRouteConstraint
{
   public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
   {
       // Validate routeValueDictionary["clientType"] here
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 2013-08-17
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多