servicestack 使用dotnet core时如何使ApiMember工作,servicestack,.net-core,servicestack,.net Core" /> servicestack 使用dotnet core时如何使ApiMember工作,servicestack,.net-core,servicestack,.net Core" />

servicestack 使用dotnet core时如何使ApiMember工作

servicestack 使用dotnet core时如何使ApiMember工作,servicestack,.net-core,servicestack,.net Core,最近,我一直在努力利用元数据页面,使我们的文档更具响应性。我发现ApiMember似乎不太适合使用DotnetCore的项目 这是我的DTO,已更新以包含DTO定义的全部内容 using ServiceStack; [Api("Test request")] [Route("/test/{Input}","GET")] [Route("/test")] public class TestRequest:IReturn<TestResponse> { [ApiMember(N

最近,我一直在努力利用元数据页面,使我们的文档更具响应性。我发现ApiMember似乎不太适合使用DotnetCore的项目

这是我的DTO,已更新以包含DTO定义的全部内容

using ServiceStack;

[Api("Test request")]
[Route("/test/{Input}","GET")]
[Route("/test")]
public class TestRequest:IReturn<TestResponse>
{
    [ApiMember(Name="Parameter name", Description = "Parameter Description", 
    ParameterType = "body", DataType = "string", IsRequired = true)]
    public string Input { get; set; }
}
public class TestResponse
{
    public string Output { get; set; }
}
//Validator
public class TestRequestValidator : AbstractValidator<TestRequest>
{
    public TestRequestValidator()
    {
        RuleFor(r => r.Input).NotEmpty();
    }
}
使用ServiceStack;
[Api(“测试请求”)]
[路由(“/test/{Input}”,“GET”)]
[路线(“/测试”)]
公共类TestRequest:IReturn
{
[ApiMember(Name=“Parameter Name”,Description=“Parameter Description”,
ParameterType=“body”,DataType=“string”,IsRequired=true)]
公共字符串输入{get;set;}
}
公共类TestResponse
{
公共字符串输出{get;set;}
}
//验证器
公共类TestRequestValidator:AbstractValidator
{
公共TestRequestValidator()
{
RuleFor(r=>r.Input).NotEmpty();
}
}
我希望名称和描述应该显示在元数据页面中,而不是。我该怎么办

而且,如果我可以问第二个问题,因为我有完整的dto,我必须问验证器(使用fluentvalidation库)是否工作,但是,如何将它连接到记录器?例如,当输入为空时,我希望记录器保留该信息,我应该怎么做

更新: 我回到我的代码中,发现如果我将DTO更改为Testrequest,它就会工作。具体来说,以下工作

namespace web
{
[Api("Test request")]
[Route("/test/{Input}", "GET")]
[Route("/test")]
public class TestRequest : IReturn<TestResponse>
{
    [ApiMember(Name = "Parameter name", Description = "Parameter Description",
    ParameterType = "body", DataType = "string", IsRequired = true)]
    public string Input { get; set; }
}
public class TestResponse
{
    public string Output { get; set; }
}
}
命名空间web
{
[Api(“测试请求”)]
[路由(“/test/{Input}”,“GET”)]
[路线(“/测试”)]
公共类TestRequest:IReturn
{
[ApiMember(Name=“Parameter Name”,Description=“Parameter Description”,
ParameterType=“body”,DataType=“string”,IsRequired=true)]
公共字符串输入{get;set;}
}
公共类TestResponse
{
公共字符串输出{get;set;}
}
}
但事实并非如此

[Api("Test request")]
[Route("/test/{Input}", "GET")]
[Route("/test")]
public class TestRequest : IReturn<TestResponse>
{
    [ApiMember(Name = "Parameter name", Description = "Parameter Description",
    ParameterType = "body", DataType = "string", IsRequired = true)]
    public string Input { get; set; }
}
public class TestResponse
{
    public string Output { get; set; }
}
[Api(“测试请求”)]
[路由(“/test/{Input}”,“GET”)]
[路线(“/测试”)]
公共类TestRequest:IReturn
{
[ApiMember(Name=“Parameter Name”,Description=“Parameter Description”,
ParameterType=“body”,DataType=“string”,IsRequired=true)]
公共字符串输入{get;set;}
}
公共类TestResponse
{
公共字符串输出{get;set;}
}
我刚刚创建了一个项目来测试您的TestRequest服务:

[Api("Test request")]
[Route("/test/{Input}", "GET")]
[Route("/test")]
public class TestRequest : IReturn<TestResponse>
{
    [ApiMember(Name = "Parameter name", Description = "Parameter Description",
        ParameterType = "body", DataType = "string", IsRequired = true)]
    public string Input { get; set; }
}
public class TestResponse
{
    public string Output { get; set; }
}

public class MyServices : Service
{
    public object Any(TestRequest request) => new TestResponse();
}
[Api(“测试请求”)]
[路由(“/test/{Input}”,“GET”)]
[路线(“/测试”)]
公共类TestRequest:IReturn
{
[ApiMember(Name=“Parameter Name”,Description=“Parameter Description”,
ParameterType=“body”,DataType=“string”,IsRequired=true)]
公共字符串输入{get;set;}
}
公共类TestResponse
{
公共字符串输出{get;set;}
}
公共类MyServices:Service
{
公共对象Any(TestRequest请求)=>newtestresponse();
}
在NuGet上使用最新的.NET Core v1.0.41版时,其工作正常:

因此,如果您没有使用最新版本的.NET Core,则需要升级。

我刚刚创建了一个项目来测试您的TestRequest服务:

[Api("Test request")]
[Route("/test/{Input}", "GET")]
[Route("/test")]
public class TestRequest : IReturn<TestResponse>
{
    [ApiMember(Name = "Parameter name", Description = "Parameter Description",
        ParameterType = "body", DataType = "string", IsRequired = true)]
    public string Input { get; set; }
}
public class TestResponse
{
    public string Output { get; set; }
}

public class MyServices : Service
{
    public object Any(TestRequest request) => new TestResponse();
}
[Api(“测试请求”)]
[路由(“/test/{Input}”,“GET”)]
[路线(“/测试”)]
公共类TestRequest:IReturn
{
[ApiMember(Name=“Parameter Name”,Description=“Parameter Description”,
ParameterType=“body”,DataType=“string”,IsRequired=true)]
公共字符串输入{get;set;}
}
公共类TestResponse
{
公共字符串输出{get;set;}
}
公共类MyServices:Service
{
公共对象Any(TestRequest请求)=>newtestresponse();
}
在NuGet上使用最新的.NET Core v1.0.41版时,其工作正常:


因此,如果您没有使用最新版本的.NET Core,则需要升级。

请包含TestRequest的完整类定义unmodified@mythz更新,现在它有完整的定义。我还问了另一个关于如何将fluentvalidation结果导出到loggerI的问题。我刚刚创建了一个.NET核心项目示例,该项目正在按预期运行,因此如果尚未升级到最新版本,则需要升级到最新版本。如果仍然存在问题,请在GitHub上发布一个独立的可验证示例,我会查看它。请打开新问题以询问无关问题,但您可以使用
ValidationFeature.ErrorResponseFilter
hook拦截和自定义错误响应DTO。@mythz谢谢!!帮了大忙!请包含TestRequest的完整类定义unmodified@mythz更新,现在它有完整的定义。我还问了另一个关于如何将fluentvalidation结果导出到loggerI的问题。我刚刚创建了一个.NET核心项目示例,该项目正在按预期运行,因此如果尚未升级到最新版本,则需要升级到最新版本。如果仍然存在问题,请在GitHub上发布一个独立的可验证示例,我会查看它。请打开新问题以询问无关问题,但您可以使用
ValidationFeature.ErrorResponseFilter
hook拦截和自定义错误响应DTO。@mythz谢谢!!帮了大忙!在我尝试了你的代码后,我回到了我的代码,我最终发现了不同之处。不是因为我的dotnet核心版本,而是很奇怪。似乎DTO类应该与service.cs位于相同的名称空间中。我已经更新了我的问题。我认为如果dto类由于不一致(与service.cs是否在同一命名空间中)而不正确,并且它不工作,那么我可以理解。问题是它在除上述行为之外的所有其他领域都能工作。@shawhu我已经完成了,而且它仍能按预期工作,如果问题是因为您忘记放置名称空间,只需添加一个名称空间即可。不,我不认为我“忘了”放置名称空间。类或DTO类不应仅在命名空间中工作。创建名称空间只是为了确保具有相同名称的不同类在同一项目中使用时不会导致冲突。根据定义,DTO类不会有相同的问题,因为它对于每个项目都是全新的。或者,它可能是构建servicestack DTO类的一个要求,如果