C# 带破折号的Asp.net Web Api查询字符串参数
我有一个C# 带破折号的Asp.net Web Api查询字符串参数,c#,asp.net,asp.net-web-api,C#,Asp.net,Asp.net Web Api,我有一个Web.Api搜索方法,它接收以下参数: [DataContract(Namespace = "", Name = "search")] public class SearchParameters { [DataMember(Name = "property-name")] public string PropertyName { get; set; } } /api/changeLog/search?propertyName=asd // Works /api/c
Web.Api
搜索方法,它接收以下参数:
[DataContract(Namespace = "", Name = "search")]
public class SearchParameters
{
[DataMember(Name = "property-name")]
public string PropertyName { get; set; }
}
/api/changeLog/search?propertyName=asd // Works
/api/changeLog/search?property-name=asd // Doesn't work
在控制器中
,我有以下操作:
[HttpGet]
public void Search([FromUri]SearchParameters request)
{
var parameters = 1;
}
我正在尝试为PropertyName
属性(property name
)创建一个友好的名称,但模型绑定器无法识别参数:
[DataContract(Namespace = "", Name = "search")]
public class SearchParameters
{
[DataMember(Name = "property-name")]
public string PropertyName { get; set; }
}
/api/changeLog/search?propertyName=asd // Works
/api/changeLog/search?property-name=asd // Doesn't work
破折号是保留的查询字符串吗?或者我用错了?事实上,它是按照中的定义保留的(RFC 3986的标准页面,它定义了统一的资源标识符,也称为URI) 编辑我太快了--在保留字符列表中,我错误地将“=”理解为“-”。似乎破折号确实与未保留字符一起列出。这对我来说毫无意义,但那只是我的观点。。。由于RFC是官方标准,您可能希望服务器遵守该格式——IIS可能会遵守,但.NET可能不会(见下文)。 编辑结束 通常查询字符串遵循格式项“&”项。。。您可以在其中将项定义为变量“=”值 但就像在编程语言中一样,变量不能包含任何使解析名称或将其映射到变量变得困难的字符。因此,变量名中不能使用“*”和“-”等字符 EDIT对于.NET,我认为这是因为.NET试图将查询字符串参数名称映射到方法参数名称。但是,它们应该允许在
[DataMember]
属性中使用破折号。由于情况并非如此,我假设他们在构建此功能时没有咨询RFC。。。有人愿意详细说明一下吗编辑结束
相同信息的其他来源:
无保留
列表中。你是对的,我错读了“=”代表“-”。我认为使用这个字符仍然没有意义,但很明显,这个定义确实允许使用它。