使用 web.config 文件隐藏文件扩展名但排除 POST 请求

Hiding file extensions using web.config file but exclude POST requests

所以我试图使用 web.config 文件在我的 url 中隐藏文件扩展名,这是我的代码:

    <!-- Remove file extension .asp -->
    <rule name="RemoveASP" enabled="true" stopProcessing="true">
                <match url="(.*)\.asp" />
                <action type="Redirect" url="{R:1}" />
            </rule>
            <rule name="AddASP" enabled="true">
                <match url=".*" negate="false" />
                <conditions>
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    <add input="{URL}" pattern="(.*)\.(.*)" negate="true" />
                </conditions>
                <action type="Rewrite" url="{R:0}.asp" />
           </rule>    
    </rule>        

然而,当我尝试使用 ajax 时,这导致我的联系表单出现问题,它只是失败并且没有提交任何数据:

var url = "tutors.asp?YS="+YS+"&ORG="+ORG+"&BOTH="+BOTH+"&COM="+COM+"&page=International-Contact";
var jqxhr = $.ajax({
                      url: url,
                      cache: false,
                      type: "POST",
                      data: { fname: fname, lname: lname, role: role, forg: forg, location: location, phone: phone, addinfo: addinfo, email: email }
                          })
                      .fail(function(){
                      error = "Oops! There's been a fatal error and the email hasn't sent! Please refresh the page and try again.";
                      $('#error').html(error);
                      return false;
                      })
                      .done(function(){
                      $('#form_container').html("<h3>Thank you!</h3><p>Your email has been sent successfully.</p>");
                      });
              }); 

ajax 代码提交给 tutors.asp 但规则允许,所以我重定向到没有 asp 扩展名的 url。那么如何排除重定向 POST 请求?

您可以将服务器变量 REQUEST_METHOD 的条件添加到您的重写规则中。这是您的规则,仅限于 GET 个请求:

<rule name="RemoveASP" enabled="true" stopProcessing="true">
    <match url="(.*)\.asp" />
    <conditions logicalGrouping="MatchAll">
        <add input="{REQUEST_METHOD}" pattern="^GET$" />
    </conditions>
    <action type="Redirect" url="{R:1}" />
</rule>