Web API 2 中带连字符的参数
Posted
技术标签:
【中文标题】Web API 2 中带连字符的参数【英文标题】:Parameter with hyphen in Web API 2 【发布时间】:2021-11-22 21:59:37 【问题描述】:我想关注proper URL convention 并使用连字符作为单词分隔符:/api/books?author-id=3
但 C# 不支持带有连字符的属性名称。如何在 .NET Framework 4.8 中将 AuthorId
绑定到 author-id
?
例如,考虑这个 URL:/api/books?authorid=3
它映射到下面的方法。
[RoutePrefix("api/books")]
public class BooksController
[HttpGet]
public async Task<IHttpActionResult> GetBooks([FromUri] GetBooksParameters getBooksParameters)
var authorId = getBooksParameters.AuthorId;
// ...
public class GetBooksParameters
public int? AuthorId get; set;
【问题讨论】:
C# 不支持带有-
的属性名称。
【参考方案1】:
试试这个网址 ..../api/books?author-id=3&genre-id=5 。它适用于所有网络版本
[HttpGet]
public async Task<IHttpActionResult> GetBooks()
var parameters = GetBooksParameters(HttpContext);
// ...
[NonAction]
private BooksParameters GetBooksParameters(HttpContext httpContext)
var parameters = new BooksParameters();
var queryString = httpContext.Request.QueryString.Value;
foreach (string item in queryString.Split('&'))
string[] parts = item.Replace("?", "").Split('=');
switch (parts[0])
case "author-id":
parameters.AuthorId = Convert.ToInt32(parts[1]);
break;
case "book-id":
parameters.BookId = Convert.ToInt32(parts[1]);
break;
default:
break;
return parameters;
参数
public class BooksParameters
public int? AuthorId get; set;
public int? BookId get; set;
【讨论】:
这对于多种方法来说不是很可扩展... @Tvde1 问题中没有关于多种方法的内容。它不是免费的编码资源,我不会花一整天时间创建一个库。这只是对 PO 的提示。以上是关于Web API 2 中带连字符的参数的主要内容,如果未能解决你的问题,请参考以下文章