2

Webサービスにファイルをストリーミングしようとしています。私のController(ApiController)には、次のようなPost関数があります。

public void Post(Stream stream)
{
    if (stream != null && stream.Length > 0)
    {
        _websitesContext.Files.Add(new DbFile() { Filename = Guid.NewGuid().ToString(), FileBytes= ToBytes(stream) });
        _websitesContext.SaveChanges();
    }
}

次の手順を実行して、Webクライアントでファイルをストリーミングしようとしています。

public void UploadFileStream(HttpPostedFileBase file)
{
    WebClient myWebClient = new WebClient();
    Stream postStream = myWebClient.OpenWrite(GetFileServiceUrl(), "POST");
    var buffer = ToBytes(file.InputStream);
    postStream.Write(buffer, 0,buffer.Length);
    postStream.Close();
}

Webサービスをデバッグすると、Post関数に入りますが、ストリームは常にnullです。なぜこれが起こっているのか誰かが知っているのではないかと思っていましたか?

4

3 に答える 3

5

Web API は「ストリーム」タイプへのバインドをモデル化しないため、動作が見られます。代わりに、次のようにして受信リクエスト ストリームをキャプチャできます。

例:

public async Task<HttpResponseMessage> UploadFile(HttpRequestMessage request)
    {
        Stream requestStream = await request.Content.ReadAsStreamAsync();

注: ApiController を介して利用可能な「Request」プロパティを介して、この要求メッセージにいつでもアクセスできるため、HttpRequestMessage をパラメータとして持つ必要さえありません。

于 2013-03-12T16:01:26.840 に答える
1

このコードで置き換えることができます

var uri = new Uri(GetFileServiceUrl());
Stream postStream = myWebClient.OpenWrite(uri.AbsoluteUri, "POST");
于 2012-09-07T09:21:34.433 に答える
0

RestSharpを使用すると、この種の作業が非常に簡単になります。試してみることをお勧めします。

于 2012-09-08T12:47:58.793 に答える