4

Breezecontroller を使用しているフォーム認証を使用して WebAPI を保護しています WebAPI メソッドを呼び出そうとすると、次のエラーが返されます。

status:404 statusText: "Not Found" message:"MetaData query failed for:'';, 一致する HTTP リソースが見つかりませんでした...

私の質問は、「UnAuthorized error(401)」が返されないのはなぜですか? メタデータも [Authorize] で装飾されます。

FormsAuthentication のリダイレクトが問題を引き起こしているようです。Login(has AllowAnonymous) WebApi メソッドにリダイレクトしており、見つかったにもかかわらず見つからないと報告しています。また、コントローラーの代わりにAuthrozieをメソッドに適用しています。正確なエラーは

  {"$id":"1","$type":"System.Web.Http.HttpError,System.Web.Http","Message":"NoHTTPresourcewasfoundthatmatchestherequestURI'http://localhost:40678/api/Country/Login?ReturnUrl=/api/Country/Metadata'.","MessageDetail":"Noactionwasfoundonthecontroller'Country'thatmatchestherequest."}
4

2 に答える 2

3

ちょうど試してみて、うまくいきました。URLに間違いがあると思います。

これが私のコントローラーの予備です:

【認可】
【ブリーズコントローラー】
public class BreezeTodoController : ApiController
{
    プライベート読み取り専用 BreezeTodoContext _context;

    public BreezeTodoController() {
        _context = new BreezeTodoContext(ユーザー);
    }

    [HttpGet]
    公開文字列メタデータ() {
        return _context.Metadata();
    }
    // ... もっと

このURLでヒットしました

http://localhost:32377/api/breezetodox/metadata

そして、私は401を取り戻します

リクエストURL:http://localhost:32377/api/breezetodo/metadata
リクエスト方法:GET
ステータスコード:401 無許可

ただし、URL を間違えた場合 (breezetodo の後の「x」を参照)

リクエスト URL:http://localhost:32377/api/breezetodox/metadata
リクエスト方法:GET
ステータス コード:404 見つかりません

アクション名が一致しない場合も同じです (メタデータの後の「x」を参照):

リクエストURL:http://localhost:32377/api/breezetodo/metadatax
リクエスト方法:GET
ステータス コード:404 見つかりません

つまり、HTTP は、最初にそのリソースが見つからない場合、そのリソースが無許可であることを報告できません。

于 2013-01-18T19:25:02.200 に答える
0

BreezeController に [Authorize] のタグを付けてから、このリンクを使用して Breeze メタデータを直接取得しようとする場合:

Request URL:http://localhost/breeze/breeze/metadata

にリダイレクトします:

http://localhost/Login?ReturnUrl=%2Fbreeze%2Fbreeze%2Fmetadata with a 404

[Authorize] がなければ、同じリンクを使用した Breeze メタデータへのアクセスは正常に機能します。

于 2014-10-24T09:31:55.950 に答える