加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

用于高级搜索/过滤的.Net WebAPI URI约定

发布时间:2020-12-16 07:36:15 所属栏目:asp.Net 来源:网络整理
导读:我对微软的REST和WebAPI比较陌生.我们正在实现一个中心REST服务,它将容纳几种类型的对象获取和设置.作为该项目的领导者,我的任务是提出我们正在进行的适当的Uri设计.我想知道关于战争的想法更好.是的,我没有使用“标准”这个词专门定期. 以下是我的团队和我
我对微软的REST和WebAPI比较陌生.我们正在实现一个中心REST服务,它将容纳几种类型的对象获取和设置.作为该项目的领导者,我的任务是提出我们正在进行的适当的Uri设计.我想知道关于战争的想法更好.是的,我没有使用“标准”这个词专门定期.

以下是我的团队和我目前正在娱乐的选项:

Http://servername/API/REST/Ldap/AD/employees?username=jsmith 
Http://servername/API/REST/Ldap/AD/employee/UserName?searchTerm=jsmith (this seems RPC to me)
Http://servername/API/REST/Ldap/AD/employees/getusername?searchterm?jsmith

我们也在创建一个Soap版本,因此其余的在Uri.

感谢您的投入

解决方法

对于Oppositional的评论,这是我不久前提出的.

https://groups.google.com/d/msg/servicestack/uoMzASmvxho/CtqpZdju7NcJ

public class QueryBase
{
    public string Query { get; set; }
    public int Limit { get; set; }
    public int Offset { get; set; }
}

[Route("/v1/users")]
public class User : IReturn<List<User>>
{
    public string Id { get; set; }
    public string FirstName { get; set; }
    public string MiddleName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
}

public class RequestFilterAttribute : Attribute,IHasRequestFilter
{
    #region IHasRequestFilter Members

    public IHasRequestFilter Copy()
    {
        return this;
    }

    public int Priority
    {
        get { return -100; }
    }

public void RequestFilter(IHttpRequest req,IHttpResponse res,object requestDto)
{
    var query = req.QueryString["q"] ?? req.QueryString["query"];
    var limit = req.QueryString["limit"];
    var offset = req.QueryString["offset"];

    var user = requestDto as QueryBase;
    if (user == null) { return; }
    user.Query = query;
    user.Limit = limit.IsEmpty() ? int.MaxValue : int.Parse(limit);
    user.Offset = offset.IsEmpty() ? 0 : int.Parse(offset);
    }

#endregion
}

[Route("/v1/users/search","GET")]
[RequestFilter]
public class SearchUser : QueryBase,IReturn<PagedResult<User>> { }

public class UsersService : Service
{
    public static List<User> UserRepository = new List<User>
    {
        new User{ Id="1",FirstName = "Michael",LastName = "A",Email = "michaelEmail" },new User{ Id="2",FirstName = "Robert",LastName = "B",Email = "RobertEmail" },new User{ Id="3",FirstName = "Khris",LastName = "C",Email = "KhrisEmail" },new User{ Id="4",FirstName = "John",LastName = "D",Email = "JohnEmail" },FirstName = "Lisa",LastName = "E",Email = "LisaEmail" }
    };

    public PagedResult<User> Get(SearchUser request)
{
    var query = request.Query;
    var users = request.Query.IsNullOrEmpty()
                    ? UserRepository.ToList()
                    : UserRepository.Where(x => x.FirstName.Contains(query) || x.LastName.Contains(query) || x.Email.Contains(query)).ToList();

    var totalItems = users.Count;
    var totalPages = (int)Math.Ceiling((decimal)totalItems / (decimal)request.Limit);
    var currentPage = request.Offset;
    users = users.Skip(request.Offset * request.Limit).Take(request.Limit).ToList();
    var itemCount = users.Count;

    return new PagedResult<User>
        {
            TotalItems = totalItems,TotalPages = totalPages,ItemCount = itemCount,Items = users,CurrentPage = currentPage
        };
}
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读