【问题标题】:Servicestack routing problems服务栈路由问题
【发布时间】:2023-04-10 18:12:01
【问题描述】:

嗨,我是 servicestack 的新手 路由有问题 我有一条路线

[Route("/Person/{ID}", "GET")]
public class GetPersonByID : IReturn<PersonResponse>
{
    public decimal ObjectId { get; set; }
}
[Route("/Organization/{ID}/Person", "GET")]
public class GetPersonByOrganizationId : List<PersonResponse>
{
    public decimal ObjectId { get; set; }
}

但是我正在尝试/Organization/281478302400588/Persons,我收到一条错误消息 Unable to bind request

Stacktrace: 在 ServiceStack.Host.RestHandler.CreateRequest(IRequest httpReq, IRestPath 休息路径)在 ServiceStack.Host.RestHandler.ProcessRequestAsync(IRequest httpReq, IResponse httpRes, String operationName)

【问题讨论】:

    标签: servicestack


    【解决方案1】:
    • 您需要确保路由中的段名称与 DTO 中的属性匹配。所以{ID} 应该是{ObjectId}

    • 在第二个请求中,您应该使用IReturn&lt;List&lt;PersonResponse&gt;&gt;,而不是从您的请求中的List&lt;PersonResponse&gt; 继承

    [Route("/Person/{ObjectId}", "GET")]
    public class GetPersonByID : IReturn<PersonResponse>
    {
        public decimal ObjectId { get; set; }
    }
    
    [Route("/Organization/{ObjectId}/Person", "GET")]
    public class GetPersonByOrganizationId : IReturn<List<PersonResponse>>
    {
        public decimal ObjectId { get; set; }
    }
    
    • 您还注意到您正在尝试/Organization/281478302400588/Persons 您在请求中使用了Persons,但路由是Person,因此请相应地更改请求或路由。 (可能是路线上最好的。即[Route("/Organization/{ObjectId}/Persons", "GET")]

    然后确保在您的服务中进行类似这样的设置:

    public class PersonService : Service
    {
        public PersonResponse Get(GetPersonByID request)
        {
            // return new PersonResponse();
        }
    
        public List<PersonResponse> Get(GetPersonByOrganizationId request)
        {
            // return new List<PersonResponse>();
        }
    }
    

    希望对你有帮助。

    【讨论】:

    • @KennethFoliJørgensen 太好了,很高兴它有帮助
    猜你喜欢
    • 2014-05-09
    • 2010-10-15
    • 2021-04-02
    • 1970-01-01
    • 2011-04-15
    • 2023-03-04
    • 2011-05-04
    • 2014-06-08
    • 1970-01-01
    相关资源
    最近更新 更多