我有一个Web.Api
search 方法接收以下参数:
[DataContract(Namespace = "", Name = "search")]
public class SearchParameters
{
[DataMember(Name = "property-name")]
public string PropertyName { get; set; }
}
In the Controller
,我有这个动作:
[HttpGet]
public void Search([FromUri]SearchParameters request)
{
var parameters = 1;
}
我正在尝试为以下内容创建一个友好的名称PropertyName
财产 (property-name
),但模型绑定器无法识别该参数:
/api/changeLog/search?propertyName=asd // Works
/api/changeLog/search?property-name=asd // Doesn't work
破折号是保留的查询字符串字符吗?或者我用错了?
事实上,它是按照定义保留的https://www.rfc-editor.org/rfc/rfc3986 https://www.rfc-editor.org/rfc/rfc3986(RFC 3986 的标准页面,定义统一资源标识符,也称为 URI)。
EDIT我太快了——我把保留字符列表中的“=”误读成了“-”。看来破折号确实与未保留的字符一起列出。这对我来说毫无意义,但这只是我的观点...这个 RFC 是官方标准,您会期望服务器尊重该格式 - IIS 可能会尊重这种格式,但 .NET 可能不会(见下文)。编辑结束
通常查询字符串遵循 ITEM '&' ITEM... 格式,您可以将 ITEM 定义为 VARIABLE '=' VALUE。
但就像在编程语言中一样,VARIABLE 不能包含任何导致难以解析名称或将其映射到变量的字符。因此变量名中不能使用“*”、“-”等字符。
EDIT对于 .NET,我希望这是因为 .NET 尝试将查询字符串参数名称映射到方法参数名称。但他们应该允许在[DataMember]
属性。由于情况并非如此,我认为他们在构建此功能时没有查阅 RFC...有人愿意详细说明吗?编辑结束
相同信息的其他来源:
- http://en.wikipedia.org/wiki/URI_scheme http://en.wikipedia.org/wiki/URI_scheme
- http://en.wikipedia.org/wiki/Uniform_resource_identifier http://en.wikipedia.org/wiki/Uniform_resource_identifier
- http://www.rfc-editor.org/rfc/rfc3986.txt http://www.rfc-editor.org/rfc/rfc3986.txt
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)