c# - 其请求中包含 Stream 的 ServiceStack 服务会破坏元数据页面

标签 c# servicestack metadata .net-core

当我创建一个在请求中包含 Stream 的简单 ServiceStack 服务时,我发现无法访问该服务方法的元数据页面。

服务本身似乎可以工作(我可以使用 PostMan 将流发送到 http://localhost:12345/uploadStream,并且我可以使用一些额外的代码在服务方法中反序列化流。)

我正在使用 .NET Core 和 Servicestack...

完整的存储库:

using Funq;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using ServiceStack;
using ServiceStack.Web;
using System;
using System.IO;
using System.Threading.Tasks;

namespace ServiceStackCoreTest
{
    class Program
    {
        static void Main(string[] args)
        {
            IWebHost host = new WebHostBuilder()
                .UseKestrel()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseStartup<Startup>()
                .UseUrls("http://*:12345/test/")
                .Build();
            host.Run();
        }
    }

    public class Startup
    {
        public void ConfigureServices(IServiceCollection services){ }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            app.ApplicationServices.GetService<ILoggerFactory>();
            app.UseServiceStack((AppHostBase)Activator.CreateInstance<AppHost>());

            app.Run((RequestDelegate)(context => (Task)Task.FromResult<int>(0)));
        }
    }

    public class AppHost : AppHostBase
    {
        public AppHost() : base("Test Service", typeof(Program).GetAssembly()){ }

        public override void Configure(Container container){ }
    }

    public class MyService : Service
    {
        public TestResponse Any(TestRequest request)
        {
            return new TestResponse();
        }
    }

    [Route("/uploadStream", "POST", Summary = "Upload stream")]
    public class TestRequest : IReturn<TestResponse>, IRequiresRequestStream
    {
        public Stream RequestStream { get; set; }
    }

    public class TestResponse{ }
}

我完整的csproj(我使用的是Windows 10/VS2017)...

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp1.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Hosting" Version="1.1.1" />
    <PackageReference Include="ServiceStack.Core" Version="1.0.40" />
    <PackageReference Include="ServiceStack.Kestrel" Version="1.0.40" />
  </ItemGroup>

</Project>

当我浏览到元数据页面时,我可以看到操作列表,但是当我单击“TestRequest”方法旁边的“XML”、“JSON”或“JSV”时,出现错误 chrome 中的 ERR_INCOMPLETE_CHUNKED_ENCODING (Edge 没有报告任何内容),在我的输出窗口中,我看到 Exception returned: 'System.MemberAccessException' in System.Private.CoreLib.ni.dll。奇怪的是,点击“CSV”会给我一个元数据页面。

我在 ServiceStack 项目中是否错误地创建了服务方法?

最佳答案

.NET Core 包存在无法创建抽象类 (Stream) 实例的问题,现在应从 this commit 解决此问题.

此更改可从 NuGet 上现已提供的 v1.0.41 *.Core 包中获取。

关于c# - 其请求中包含 Stream 的 ServiceStack 服务会破坏元数据页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43807621/

相关文章:

c# - 离开 While 循环?

asp.net-mvc - MVC Controller 中的 ServiceStack session 始终为空

redis - 如何为Redis和他的哨兵指定密码?

c# - WCF 如何启用元数据?

bash - 如何在 Bash shell 脚本中访问自动命名的变量

c# - 如何在 C# 中清除面板的图形?

c# - 我正在尝试使用 ajax 调用将上传的文件从 View 发送到 Controller ,但该文件在 Controller 中接收为 null

c# - 如何返回 JSON 而不是关联数组

kotlin - 如何在 Kotlin 中获取文件系统元数据?

c# - RuntimeBinderException - C# .NET 4 动态关键字 - 帮助我理解为什么方法不匹配