Angular $资源POST / PUT到WebAPI 405方法不允许

时间:2015-07-17 19:29:23

标签: angularjs iis web asp.net-web-api angular-resource

我无法找到以下问题的有用答案 Angular $ resource POST / PUT(两者)在简单的WebAPI调用上生成405.0 - Method Not Allowed错误。工作得很好。 App是一个运行在IIS 7.5中的WebAPI的MVC。当我尝试在本地运行示例时 - 工作正常。这不是CORS问题,Auth被剥夺了。

PUT http://portal.local.com/api/products/5 405(方法不允许)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
  <title>IIS 7.5 Detailed Error - 405.0 - Method Not Allowed</title>
  <style type="text/css">
    <!-- body {
      margin: 0;
      font-size: .7em;
      font-family: Verdana, Arial, Helvetica, sans-serif;
      background: #CBE1EF;
    }
    code {
      margin: 0;
      color: #006600;
      font-size: 1.1em;
      font-weight: bold;
    }
    .config_source code {
      font-size: .8em;
      color: #000000;
    }
    pre {
      margin: 0;
      font-size: 1.4em;
      word-wrap: break-word;
    }
    ul,
    ol {
      margin: 10px 0 10px 40px;
    }
    ul.first,
    ol.first {
      margin-top: 5px;
    }
    fieldset {
      padding: 0 15px 10px 15px;
    }
    .summary-container fieldset {
      padding-bottom: 5px;
      margin-top: 4px;
    }
    legend.no-expand-all {
      padding: 2px 15px 4px 10px;
      margin: 0 0 0 -12px;
    }
    legend {
      color: #333333;
      padding: 4px 15px 4px 10px;
      margin: 4px 0 8px -12px;
      _margin-top: 0px;
      border-top: 1px solid #EDEDED;
      border-left: 1px solid #EDEDED;
      border-right: 1px solid #969696;
      border-bottom: 1px solid #969696;
      background: #E7ECF0;
      font-weight: bold;
      font-size: 1em;
    }
    a:link,
    a:visited {
      color: #007EFF;
      font-weight: bold;
    }
    a:hover {
      text-decoration: none;
    }
    h1 {
      font-size: 2.4em;
      margin: 0;
      color: #FFF;
    }
    h2 {
      font-size: 1.7em;
      margin: 0;
      color: #CC0000;
    }
    h3 {
      font-size: 1.4em;
      margin: 10px 0 0 0;
      color: #CC0000;
    }
    h4 {
      font-size: 1.2em;
      margin: 10px 0 5px 0;
    }
    #header {
      width: 96%;
      margin: 0 0 0 0;
      padding: 6px 2% 6px 2%;
      font-family: "trebuchet MS", Verdana, sans-serif;
      color: #FFF;
      background-color: #5C87B2;
    }
    #content {
      margin: 0 0 0 2%;
      position: relative;
    }
    .summary-container,
    .content-container {
      background: #FFF;
      width: 96%;
      margin-top: 8px;
      padding: 10px;
      position: relative;
    }
    .config_source {
      background: #fff5c4;
    }
    .content-container p {
      margin: 0 0 10px 0;
    }
    #details-left {
      width: 35%;
      float: left;
      margin-right: 2%;
    }
    #details-right {
      width: 63%;
      float: left;
      overflow: hidden;
    }
    #server_version {
      width: 96%;
      _height: 1px;
      min-height: 1px;
      margin: 0 0 5px 0;
      padding: 11px 2% 8px 2%;
      color: #FFFFFF;
      background-color: #5A7FA5;
      border-bottom: 1px solid #C1CFDD;
      border-top: 1px solid #4A6C8E;
      font-weight: normal;
      font-size: 1em;
      color: #FFF;
      text-align: right;
    }
    #server_version p {
      margin: 5px 0;
    }
    table {
      margin: 4px 0 4px 0;
      width: 100%;
      border: none;
    }
    td,
    th {
      vertical-align: top;
      padding: 3px 0;
      text-align: left;
      font-weight: bold;
      border: none;
    }
    th {
      width: 30%;
      text-align: right;
      padding-right: 2%;
      font-weight: normal;
    }
    thead th {
      background-color: #ebebeb;
      width: 25%;
    }
    #details-right th {
      width: 20%;
    }
    table tr.alt td,
    table tr.alt th {
      background-color: #ebebeb;
    }
    .highlight-code {
      color: #CC0000;
      font-weight: bold;
      font-style: italic;
    }
    .clear {
      clear: both;
    }
    .preferred {
      padding: 0 5px 2px 5px;
      font-weight: normal;
      background: #006633;
      color: #FFF;
      font-size: .8em;
    }
    -->
  </style>

</head>

<body>
  <div id="header">
    <h1>Server Error in Application "LITE_PORTAL"</h1>
  </div>
  <div id="server_version">
    <p>Internet Information Services 7.5</p>
  </div>
  <div id="content">
    <div class="content-container">
      <fieldset>
        <legend>Error Summary</legend>
        <h2>HTTP Error 405.0 - Method Not Allowed</h2> 
        <h3>The page you are looking for cannot be displayed because an invalid method (HTTP verb) is being used.</h3> 
      </fieldset>
    </div>
    <div class="content-container">
      <fieldset>
        <legend>Detailed Error Information</legend>
        <div id="details-left">
          <table border="0" cellpadding="0" cellspacing="0">
            <tr class="alt">
              <th>Module</th>
              <td>WebDAVModule</td>
            </tr>
            <tr>
              <th>Notification</th>
              <td>MapRequestHandler</td>
            </tr>
            <tr class="alt">
              <th>Handler</th>
              <td>WebDAV</td>
            </tr>
            <tr>
              <th>Error Code</th>
              <td>0x00000000</td>
            </tr>

          </table>
        </div>
        <div id="details-right">
          <table border="0" cellpadding="0" cellspacing="0">
            <tr class="alt">
              <th>Requested URL</th>
              <td>http://portal.local.com:80/api/products/5</td>
            </tr>
            <tr>
              <th>Physical Path</th>
              <td>C:\_Dev\Applications\liteangular_portal\LiteAngular\api\products\5</td>
            </tr>
            <tr class="alt">
              <th>Logon Method</th>
              <td>Anonymous</td>
            </tr>
            <tr>
              <th>Logon User</th>
              <td>Anonymous</td>
            </tr>

          </table>
          <div class="clear"></div>
        </div>
      </fieldset>
    </div>
    <div class="content-container">
      <fieldset>
        <legend>Most likely causes:</legend>
        <ul>
          <li>The request sent to the Web server used an HTTP verb that is not allowed by the module configured to handle the request.</li>
          <li>A request was sent to the server that contained an invalid HTTP verb.</li>
          <li>The request is for static content and contains an HTTP verb other than GET or HEAD.</li>
          <li>A request was sent to a virtual directory using the HTTP verb POST and the default document is a static file that does not support HTTP verbs other than GET or HEAD.</li>
        </ul>
      </fieldset>
    </div>
    <div class="content-container">
      <fieldset>
        <legend>Things you can try:</legend>
        <ul>
          <li>Verify the list of verbs enabled for the module handler this request was sent to, and ensure that this verb should be allowed for the Web site.</li>
          <li>Check the IIS log file to see which verb is not allowed for the request.</li>
          <li>Create a tracing rule to track failed requests for this HTTP status code. For more information about creating a tracing rule for failed requests, click <a href="http://go.microsoft.com/fwlink/?LinkID=66439">here</a>.</li>
        </ul>
      </fieldset>
    </div>


    <div class="content-container">
      <fieldset>
        <legend>Links and More Information</legend>
        This error means that the request sent to the Web server contained an HTTP verb that is not allowed by the configured module handler for the request.
        <p><a href="http://go.microsoft.com/fwlink/?LinkID=62293&amp;IIS70Error=405,0,0x00000000,7601">View more information &raquo;</a>
        </p>

      </fieldset>
    </div>
  </div>
</body>

</html>

我可以对这个api方法进行ajax调用,所以它们应该没问题。我试过添加/删除Http ResponseType属性都没有运气。一些网络/角色大师可以解释这个问题吗?它是IIS中的东西吗?我找到了这个:https://support.microsoft.com/en-us/kb/942051http://www.c-sharpcorner.com/Blogs/47627/wepapi-http-error-405-0-method-not-allowed.aspx 但是搞乱IIS apphost配置看起来很乱。而且我不熟悉它做出有根据的决定。 编辑:我的配置:

<customHeaders>
  <add name="Access-Control-Allow-Origin" value="*" />
  <add name="Access-Control-Allow-Headers" value="Content-Type, Accept, Authorization" />
  <add name="Access-Control-Allow-Credentials" value="true" />
  <add name="Access-Control-Allow-Methods" value="POST,GET,PUT,DELETE,OPTIONS" />
  <add name="Access-Control-Max-Age" value="1728000" />      
</customHeaders>

                                                           

提前致谢!

P.S。看起来这个问题与WebDAVModule有关: 通知MapRequestHandler 处理程序WebDAV 错误代码0x0000000

但是,任何人都知道它可能是什么?有人吗?...

1 个答案:

答案 0 :(得分:2)

结果发现删除WebDAV处理程序并且WebDAVModule处理了这个问题:

<handlers>
  <remove name="WebDAV" />
</handlers>
<modules runAllManagedModulesForAllRequests="true">
  <remove name="WebDAVModule" />
</modules>