【问题标题】:FormAuthentication with WebAPI using Breeze使用 Breeze 使用 Web API 进行表单身份验证
【发布时间】:2014-10-24 17:31:55
【问题描述】:

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

状态:404 状态文本:“未找到” 消息:“元数据查询失败:'';,未找到匹配的 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."}

【问题讨论】:

    标签: breeze


    【解决方案1】:

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

    这是我的控制器的初步介绍:

    [授权] [微风控制器] 公共类 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 中犯了错误(请参阅breezetodo 后面的“x”)

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

    如果我的操作名称不匹配,也是一样(请参阅元数据后的“x”):

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

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

    【讨论】:

    • 好像 FormsAuthentication 的重定向有问题。
    • 病房,我仍然收到 404,原因是 FormsAuthentication 在发现用户未授权后重定向到登录 URL。在您的示例中,您是否使用 FormsAuthentication,我能够通过在 loginURL 中提供方法签名来改进它,现在它运行 Authentication 方法并且我得到了 UserNot Found。所以我想知道有没有更好的方法来使用 WebAPI 配置 FormsAuthentication ?
    • 我没有花我应该(并且会)的时间。对于我的示例,我劫持了 MVC 4 SPA Template 示例,该示例具有与 Todo 应用程序一起使用的登录和注册 UI
    • 我接受了答案,因为我们已经安装了 ASP.NET Fall 2012 Update BUILD。否则 FormsAuthentication 的重定向会出现问题。我确实找到了抑制重定向的解决方案,但认为更新到 ASP.NET 2012 秋季更新解决了这个问题
    【解决方案2】:

    当使用 [Authorize] 标记 BreezeController 然后尝试使用此链接直接检索 Breeze 元数据时:

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

    重定向到:

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

    如果没有 [Authorize],使用相同链接访问 Breeze 元数据可以正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-19
      • 2015-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多