如何在使用dotnet核心时使ApiMember正常工作
最近,我一直在尝试利用元数据页面来成为我们努力的一部分,以使我们的文档更具响应能力。我发现ApiMember似乎不能用于使用dotnet核心的项目。如何在使用dotnet核心时使ApiMember正常工作
这是我的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();
}
}
的全部内容,我期待的名称和说明应在元数据页面显示,事实并非如此。我该怎么办?
而且,如果我可能会问第2个问题,因为我有完整的dto,我必须要求验证器(使用fluentvalidation lib)确实有效,但是,如何将它连接到记录器?例如,当输入为空时,我希望记录器保存那条信息,我该怎么办?
更新: 我回到了我的代码,我发现,如果我改变我的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; }
}
}
这并不
[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; }
}
我刚刚创建NetCoreApps/scratch项目来测试您的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();
}
这是工作与使用最新v1.0.41预期NuGet上的.NET Core:
因此,如果您不使用最新版本的.NET Core,则需要升级。
我尝试了你的工作后,我回到我的代码,我终于找到了差异。不是因为我的dotnet核心版本,而是很奇怪。看来DTO类应该和service.cs在同一个名字空间中。我更新了我的问题。 – shawhu
我认为,如果由于不一致导致dto类不正确(在与service.cs相同的命名空间中)并且它不起作用,那么我可以理解。问题是在所有其他领域都有效,除了上述行为。 – shawhu
@shawhu我已经[将DTO移动到不同的命名空间](https://github.com/NetCoreApps/scratch/commit/928b8b0e1c8860c2fc78bf2844624c1e59b4c0ff)并且它仍然按预期工作,如果问题是因为您忘记放置命名空间,只需添加一个。 – mythz
请包括完整的类定义TestRequest未修改 – mythz
@mythz更新,现在它有完整的定义。我还问过关于如何将fluentvalidation结果导出到日志记录器的另一个问题 – shawhu
我刚刚创建了一个按预期工作的示例.NET Core项目,因此如果尚未完成,则需要升级到最新版本,如果仍有问题,请在GitHub上发布独立的可验证示例,我会检查一下。请打开新问题以询问无关的问题,但您可以使用'ValidationFeature.ErrorResponseFilter'钩子截取并自定义错误响应DTO。 – mythz