3

https://github.com/ServiceStack/ServiceStack/wiki/New-Apiで説明されている方法を使用して、CORS を有効にしています。これは機能しているようです。つまり、応答で正しい Access-Control ヘッダーが返されますが、ステータス コードは 404 です。これは問題ですか?

完全を期すために、エラー以外のコードを返すことをお勧めします。http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.htmlを読むと、200 を返す必要があるように見えます。これを行う最善の方法は何ですか?

サービス メソッドの定義は次のとおりです。

    [EnableCors]
    public void Options(ApiKeyRequest apiKeyRequest)
    {
    }

HTTP リクエストは次のとおりです。

OPTIONS http://myreallycoolwebapi/apikeyrequests HTTP/1.1
Host: myreallycoolwebapi
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: http://localhost:8000
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11
Access-Control-Request-Headers: origin, content-type, accept
Accept: */*
Referer: http://localhost:8000/index.html
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

応答は次のとおりです。

HTTP/1.1 404 Not Found
Server: nginx
Date: Sat, 17 Nov 2012 18:06:01 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 3
Connection: keep-alive
Cache-Control: private
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Headers: Content-Type

404

更新 1

これは私のリソースタイプです。

[Route("/apikeyrequests", "POST")]
public class ApiKeyRequest : IReturn<ApiKeyRequest>
{
    public string EmailAddress { get; set; }
}

POST リクエストは正常に機能します。

4

2 に答える 2

3

予想されるルートに一致するものはまだ見ていません/apikeyrequests

カスタム ルート定義はありますか。たとえば、次のようになります。

[Route("/apikeyrequests")]
public class ApiKeyRequest {}

リクエストに追加?

于 2012-11-17T18:34:14.507 に答える
2

CORS仕様自体は、200以外のプリフライト応答がエラーであることを明示的に示しています。ここの「応答に200ではないHTTPステータスコードがある場合」セクションを参照してください。

http://www.w3.org/TR/cors/#cross-origin-request-with-preflight-0

この要件の動機が何であるかはわかりません。おそらく、404がエンドポイントが実際に存在するかどうかに関して混乱を招く可能性があるためです。

于 2012-11-18T03:44:45.047 に答える