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 中带连字符的参数的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Web API 中带有可选参数的属性路由

http、https请求URL中带有&等特殊字符的解决方法

参数中带有 IEnumerable 的 C# OData Web API POST 端点返回错误 400,输入无效

允许在 Web API 参数中使用特殊字符

shell处理json串中带空格

ASP.NET Web API 中的可选查询字符串参数