servicestack,Routes,servicestack" /> servicestack,Routes,servicestack" />

Routes 难以配置多个路由

Routes 难以配置多个路由,routes,servicestack,Routes,servicestack,/v1/Tenants/{TenantId}路由正在工作,但是/v1/Tenants/{TenantName}路由不工作,我不确定发生了什么问题?此外,这是设计过滤标准的正确方法还是具有过滤标准的正确方法 //Request DTO [Route("/v1/Tenants/{TenantName}", "GET")] public class TenantRequestByTenantName: IReturn<TenantResponse> { public string

/v1/Tenants/{TenantId}
路由正在工作,但是
/v1/Tenants/{TenantName}
路由不工作,我不确定发生了什么问题?此外,这是设计过滤标准的正确方法还是具有过滤标准的正确方法

//Request DTO
[Route("/v1/Tenants/{TenantName}", "GET")]
public class TenantRequestByTenantName: IReturn<TenantResponse>
{
    public string TenantName { get; set; }
}

//Request DTO
[Route("/v1/Tenants/{TenantId}", "GET")]
public class TenantRequestById : IReturn<TenantResponse>
{
    public int? TenantId { get; set; }
}

//Response DTO
public class TenantResponse
{
    public ITenantEntity Result { get; set; }
    public ResponseStatus ResponseStatus { get; set; }
}

public class RestaurantService : Service
{
    public object Any(TenantRequestById request)
    {
        return this.GetTenant(request);
    }

    public object Any(TenantRequestByTenantName request)
    {
        return this.GetTenant(request);
    }

    private object GetTenant(object whereConditions)
    {
        return new TenantResponse
        {
            Result = new TenantManager().GetRow(whereConditions)
        };
    }
}
//请求DTO
[路由(“/v1/Tenants/{TenantName}”,“GET”)]
公共类租户RequestByTenantName:IReturn
{
公共字符串租户名称{get;set;}
}
//请求DTO
[路由(“/v1/Tenants/{TenantId}”,“GET”)]
公共类租户请求ById:IReturn
{
public int?TenantId{get;set;}
}
//响应DTO
公屋租户回应
{
公共实体结果{get;set;}
公共响应status ResponseStatus{get;set;}
}
公共类餐厅服务:服务
{
任何公共对象(租户请求)
{
返回此.GetTenant(请求);
}
任何公共对象(租户请求ByTenantName请求)
{
返回此.GetTenant(请求);
}
私有对象GetTenant(对象条件)
{
返回新租户响应
{
结果=新租户管理器().GetRow(whereConditions)
};
}
}

由于两条路线处理同一条路线,因此路线不明确,即:

/v1/Tenants/xxx
您需要有单独的路线,例如:

[Route("/v1/tenants/{TenantId}")]
public class TenantRequestById { ... }

[Route("/v1/tenants/by-name/{TenantName}")]
public class TenantRequestByTenantName { ... }
或者,您可以使用一个服务来处理这两个请求,具体取决于它是否为整数:

然后,在服务实现中,您可以检查Slug是否为整数Id,以选择适当的查询,例如:

public object Get(GetTechnology request)
{
    int id;
    var tech = int.TryParse(request.Slug, out id)
        ? Db.SingleById<Technology>(id)
        : Db.Single<Technology>(x => x.Slug == request.Slug.ToLower());

    return new GetTechnologyResponse {
        Result = tech,
    };
}
public对象获取(GetTechnology请求)
{
int-id;
var tech=int.TryParse(request.Slug,out id)
?数据库单字节id(id)
:Db.Single(x=>x.Slug==request.Slug.ToLower());
返回新的GetTechnologyResponse{
结果=技术,
};
}

我将继续采用分离路线方法,我认为它将在整个应用程序中保持一致。谢谢你的帮助!
var response = client.Get(GetTechnology { Id = 1 });

var response = client.Get(GetTechnology { Slug = "servicestack" });
public object Get(GetTechnology request)
{
    int id;
    var tech = int.TryParse(request.Slug, out id)
        ? Db.SingleById<Technology>(id)
        : Db.Single<Technology>(x => x.Slug == request.Slug.ToLower());

    return new GetTechnologyResponse {
        Result = tech,
    };
}