4

我正在使用表单身份验证保护 WebAPI,即使用 Breezecontroller 当我尝试调用 WebAPi 方法时,我得到了以下错误。

状态:404 statusText:“未找到”消息:“元数据查询失败:'';,没有找到匹配的Http资源...

我的问题是为什么我没有回复“未经授权的错误(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

刚刚尝试过并且工作正常。我打赌你的网址有误。

这是我的控制器的前奏:

[授权]
[微风控制器]
公共类 BreezeTodoController : ApiController
{
    私有只读 BreezeTodoContext _context;

    公共 BreezeTodoController() {
        _context = new BreezeTodoContext(User);
    }

    [HttpGet]
    公共字符串元数据(){
        返回 _context.Metadata();
    }
    // ... 更多的

我用这个网址打了它

http://localhost:32377/api/breezetodox/元数据

我拿回了 401

请求网址:http://localhost:32377/api/breezetodo/metadata
请求方法:GET
状态码:401 未授权

但是,如果我在 URL 中犯了错误(请参阅breasttodo 后的“x”)

请求网址:http://localhost:32377/api/breezetodox/metadata
请求方法:GET
状态码:404 未找到

如果我的操作名称不匹配,则相同(请参阅元数据后的“x”):

请求网址:http://localhost:32377/api/breezetodo/metadatax
请求方法:GET
状态码:404 未找到

换句话说,如果 HTTP 一开始就找不到该资源,它就不能报告该资源是未经授权的。

于 2013-01-18T19:25:02.200 回答
0

当使用 [Authorize] 标记 BreezeController 然后尝试使用此链接直接检索 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 回答