0

我正在使用 jQuery 调用 Web 服务,但我遇到了一个非常奇怪的问题,我整个早上都遇到了问题。当我在开发环境中调用 Web 服务时,一切正常。投入生产时,我从 Firebug 获得“301 Moved Permanently 38ms”。

我的脚本是这样的:

 var data = '{"product":"' + productName + '", "from":"' + from + '", "question":"' +     question + '", "phone":"' + phone + '", "type":"' + typeOfMail + '"}';
$.ajax({
    type: "POST",
    datatype: "json",
    data: data,
    url: '<%= Page.ResolveUrl("~/Services/MailService.asmx/SendProductEmail") %>',
    contentType: "application/json; charset=utf-8",
    success: function (data) {
        resetContactControls();
        $('#<%=AskQuestionProductBtn.ClientID %>').hide();
    },
    failure: function (data) {
    }
});

这在生产中编译为以下 URL:

url: '/Services/MailService.asmx/SendProductEmail'

在我的生产环境中,使用 Firebug 我可以看到它试图访问我的 URL:

http://www.hcemballering.dk/Services/MailService.asmx/SendProductEmail

当手动尝试打开此 URL 时,我点击了我的网络服务。我也尝试过更改网址,所以它只使用正常的 ../Services/MailService.asmx/SendProductEmail 。

我还尝试查看我的安全设置,它应该可以工作(所有进程都可以访问)。我什至试图让用户“每个人”完全访问“服务”,所以这不应该是问题。

这是我的网络服务类:

[ScriptService]
public class MailService : System.Web.Services.WebService {

    ILog logger = LogManager.GetLogger(typeof(MailService));

    [WebMethod]
    public bool SendProductEmail(string product, string from, string question, string phone, string type)
    {
        try
        {

            StringBuilder content = new StringBuilder();

            content.AppendLine(
                string.Format(
                    "Produkt:<br/>{0}<br/><br/>Fra email:<br/>{1}<br/><br/>Telefon:<br/>{2}<br/><br/>Type af henvendelse:<br/>{3}<br/><br/>Spørgsmål:<br/>{4}",
                    product, from, phone, type, question));
            var module = new MailModule(content.ToString(), "Kontakt om HC produkt: " + product);
            module.SendMail();
        }
        catch (Exception exp)
        {

            throw new Exception("Mailen blev desværre ikke sendt, da der skete en fejl");
        }


        return true;
    }

}

有任何想法吗?

4

2 回答 2

3

好吧,这很愚蠢。

这是由我的 web.config 中的规则引起的。我有以下规则:

  <rule name="LowerCaseRule1" stopProcessing="true">
          <match url="[A-Z]" ignoreCase="false"/>

          <action type="Redirect" url="{ToLower:{URL}}"/>
        </rule>

当然,我的 URL 不是小写的。所以我这样做了:

 <rule name="LowerCaseRule1" stopProcessing="true">
          <match url="[A-Z]" ignoreCase="false"/>
          <conditions>
            <add input="{URL}" matchType="Pattern" pattern="^.+\.((axd)|(js)|(xaml)|(asmx))$" ignoreCase="true" negate="true"/>
          </conditions>
          <action type="Redirect" url="{ToLower:{URL}}"/>
        </rule>

并且还把所有的东西都小写了,只是因为它的风格很好。

它有效!

于 2013-03-24T14:42:32.600 回答
0

当您手动点击 Web 服务时,您正在使用 GET。你 ajax 正在使用 POST。您的 Web 服务是否设置为接收 POST?

于 2013-03-23T13:38:45.810 回答