带有视频文件的.NET Nancy响应(自托管)

时间:2018-04-25 23:09:55

标签: c# .net nancy self-hosting

我正在使用Nancy(版本1.4.4)基于REST架构在.NET上编写自托管服务器。我更喜欢自我托管(Nancy.Hosting.Self是版本1.4.1),其中一个要求功能是响应视频文件的请求。为了使图片清晰,我的合作伙伴编写了React应用程序,他需要这个视频。

我尝试过不同的选择:

首先我尝试了Response.AsFile()但是当我尝试通过链接访问它时,我得到404带标签"找不到您请求的资源。"我不明白为什么......

public class HelloModule : NancyModule
{
    public HelloModule()
    {
        Get["/"] = parameters =>
        {
            return Response.AsFile(@"C:\7\video112018.mp4","video/mp4");
        };
    }
}

第二种变体是在下面的代码中使用GenericFileResponce,但它会导致同样的问题:

public class HelloModule : NancyModule
{
    public HelloModule()
    {
        Get["/"] = parameters =>
        {
            GenericFileResponse fileResponse = new GenericFileResponse(@"C:\7\video112018.mp4");
            return fileResponse;
        };
    }
}

我尝试的最后一个选项是直接写入响应流,如下面的代码所示,但在这种情况下出现错误"指定的网络名称不再可用"发生。让它变得棘手的是这个错误有时会发生,但我没有找到任何来自它的依赖...

public class HelloModule : NancyModule
{
    public HelloModule()
    {
        Get["/"] = parameters =>
        {
            return new Response
            {
                ContentType = "video/mp4",

                Contents = s =>
                {
                    String fileName = @"C:\7\video112018.mp4";
                    using (var stream = new FileStream(fileName, FileMode.Open))
                        stream.CopyTo(s);
                    s.Flush();
                    s.Close();
                }
            };
        };
    }
}

如果您对这些解决方案有任何建议或给另一个解决方案,我将非常感激。

P上。 S.我也尝试发送图像,它适用于第三种方法但不适用于第一种或第二种

P.P。 S.不要严格判断代码,因为它只是一个例子)

1 个答案:

答案 0 :(得分:1)

通过执行以下操作,我可以进行非常基本的视频文件流传输:

Get["/"] = p =>
{
    var file = new FileStream(@"PATH_TO_FILE", FileMode.Open);
    return new StreamResponse(() => file, "video/mp4");
}

这允许播放视频文件,但没有进行搜索。

最后我找到了this个帖子。添加这些扩展名可以搜索视频。