繁体   English   中英

请求中包含流的ServiceStack服务中断元数据页面

[英]ServiceStack Service which has a Stream in its request breaks metadata page

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

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

我正在使用.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 (边缘报告什么都没有),然后在输出窗口中,看到Exception thrown: 'System.MemberAccessException' in System.Private.CoreLib.ni.dll 奇怪的是,单击“ CSV”会给我一个元数据页面。

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

.NET Core程序包存在一个问题,即无法创建抽象类(Stream)的实例,该实例现在应通过此commit解决。

此更改可从v1.0.41 *.Core可用的*.Core软件包中获得。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM