3

私はいくつかの調査を行いましたが、これは私の理解を超えています。私は Fiddler を使用して、要求/応答をキャッチしようとしています。
目標は、この webapi が、リソースやライセンスがあまりなくても、sharepont ドキュメント リポジトリのように動作することです。
私はファイルを取得するいくつかの進歩を遂げました:

public HttpResponseMessage Get(int id)
{
    byte[] content = null;
    using (FileStream fs = File.Open(@"d:\some.docx", FileMode.Open))
    {
        content = new byte[fs.Length];
        fs.Read(content, 0, (int)fs.Length);
    }
    HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
    response.Content = new ByteArrayContent(content);
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/msword");
    response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("inline")
    {
        FileName = "some.docx"
    };
    return response;
}

ブラウザはファイルを開くことを提案しますが、名前は5であるため、この部分はまだ正しく機能しません。
要求は簡単に取得でき、ブラウザーによって開始されます。応答は次のようになります (コンテンツなし)。

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 403170
Content-Type: application/msword
Expires: -1
Server: Microsoft-IIS/8.0
Content-Disposition: inline; filename=some.docx
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?QzpcV29ya1xSZXNlYXJjaFxXZWJBcGlUb09mZmljZVxXZWJBcGlUb09mZmljZVxhcGlcV29yZEFwaVw1?=
X-Powered-By: ASP.NET
Date: Wed, 21 Aug 2013 08:27:02 GMT  

url: 経由でファイルにアクセスしますhttp://localhost:49590/api/WordApi/5

その間、次の記事を見つけました: http://support.microsoft.com/kb/838028
完全には理解していないことは認めますがWebDAV、アプリケーションに実装する必要があると思いますか?
Office からの要求で何かが変わることを期待して、次のようにいくつかのオプションを追加しようとしました。

public HttpResponseMessage Options()
{
  HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
  response.Headers.Add("MS-AUTHOR-VIA", new[] { "LOCK", "UNLOCK", "PROPPATCH" });
  return response;
}

しかし、残念ながら何も変わりませんでした。オフィスの要求は次のとおりです。

OPTIONS http://localhost:49590/api/WordApi/ HTTP/1.1
X-IDCRL_ACCEPTED: t
User-Agent: Microsoft Office Protocol Discovery
Host: localhost:49590
Content-Length: 0
Connection: Keep-Alive
Pragma: no-cache

その後、別のものを作成しました。

HEAD http://localhost:49590/api/WordApi/5 HTTP/1.1
X-IDCRL_ACCEPTED: t
User-Agent: Microsoft Office Existence Discovery
Host: localhost:49590
Content-Length: 0
Connection: Keep-Alive
Pragma: no-cache

保存時に Office をだまして Web API にファイルを送信させる方法はありますか?
もう 1 つの興味深い点は、デバッグ中に、アプリケーションでメソッドOptions()とメソッドHead(int id, [FromBody] string value)が 2 回呼び出されましたが、Fiddler によると、上記の両方のケースで要求が 1 回だけ送信されたことです。

webapi を使用してこの開く/保存メカニズムを実装する方法はありますか?

アップデート:

誰もがポイントを逃したようです。問題はドキュメントを開くことではなく、Office を使用してローカルに保存することです (アプリケーションでページをアップロードすることではありません)。
添付ファイルを Content-Disposition として使用すると、ブラウザは別の方法でファイルを開きます。ファイルを一時的に保存し、その場所からドキュメントを開きます。この場合、Office は webapi に接続しようとさえしません。
ただし、インライン Office を使用すると、Web サイトの場所からドキュメントが開き、OPTIONS および HEAD 要求を通じて webapi の機能がチェックされます。
ブラウザは、次のオープン ダイアログ ボックスを生成し
ます
「アタッチメント」で

「インライン」で

4

1 に答える 1

0

答えは痛いです。解決策は、カスタム ハンドラーに WebDAV を実装することです。

于 2013-08-30T13:33:20.910 に答える