我需要实现哪些组件以及如何将其挂钩到框架中,以便将包含2个或更多单词的名称的查询参数的url用连字符分隔?
<小时/> 例如:
我会有这个网址:
www.mysite.com/resource/i-am-looking-for?parameterOne=foo¶meterTwo=bar
我想这样:
www.mysite.com/resource/i-am-looking-for?parameter-one=foo¶meter-two=bar
我的行动将是这样的:
ActionResult DoSomething(string parameterOne, string parameterTwo)
原因:用户友好的网址和一致性
我需要:
是否有图表可以在这方面看到框架扩展点?
谢谢!
答案 0 :(得分:0)
public ActionResult SomeAction( string Some-Var ) {}
无效,因为在C#变量名中不能包含连字符。允许使用下划线,但这样有效public ActionResult SomeAction( string Some_Var ) {}
现在,如果您放松了将强类型输入变量绑定到操作的需要,您可以使用Request.QueryString["some-var"]
完成目标,但是您必须处理与之关联的类型转换和错误处理。
答案 1 :(得分:0)
您可以添加自定义价值提供商工厂,如下所示,
public class MyQueryStringValueProvider : NameValuePairsValueProvider
{
public QueryStringValueProvider(
HttpActionContext actionContext,
CultureInfo culture)
: base(
() =>{
var request = actionContext.ControllerContext;
foreach(var pair in request
.GetQueryNameValuePairs()){
yield return new KeyValuePair<String,String)(
Transform(pair.Key), pair.Value
);
}, culture)
{
}
private String Transform(String key){
// just removing all - , as it is case insensitive
//
return key.Replace("-","");
}
}
您必须注册您的提供商,如下所示,
ValueProviderFactories.Factories.Add(
new MyQueryStringValueProvider());
为安全起见,您可以删除现有的QueryStringValueProvider,以避免没有破折号的密钥发生名称冲突。
对于动作名称中的破折号,您可以参考https://github.com/AtaS/lowercase-dashed-route
答案 2 :(得分:-1)
如何在客户端进行网址编码?
这样您就可以使用通用方式呼叫控制器。请查看其中一个答案:Encode URL in JavaScript?
答案 3 :(得分:-1)
例如:这是你的行动。
public ActionResult GetNew(int id)
{
return View(news.Where(i => i.Id == id).SingleOrDefault());
}
第一步 在项目中打开App_Start&gt; RouteConfig.cs。
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "GetNew",
url: "news/new-detail/{id}",
defaults: new { controller = "News", action = "GetNew", id = ""}
);
}
}
现在运行您的项目并编写您的浏览器http://localhost:....(与您不同)/ news / new-detail / 1
新身份证号码1将开启。 我希望它有所帮助