401在.ajax帖子上未经授权

时间:2011-10-21 13:44:29

标签: jquery asp.net ajax sitecore

当我的ajax正在执行POST事件时,我得到401 Unauthorized,这只是在项目通过sitecore运行时。这一切都像一个魅力我需要为sitecore工作这是我目前的设置。

我按照链接1设置了我的代码,所以我有以下内容:

MasterLayout.aspx:

<script src="jsfile.js" type="text/javascript"></script>

<script src="../../../content/javascript/jquery-1.6.2.min.js"></script>

MasterLayout.aspx.cs:

using System.Web.Services;

[WebMethod]
public static string GetDate()
{
   return DateTime.Now.ToString();
}

MyCharts.ascx

<div class="Result" id="Result">Click here for the time.</div>

jsfile.js:

$(document).ready(function() {
// Add the page method call as an onclick handler for the div.

    $('.Result').click(function() {
        $.ajax({
            type: "POST",
            url: "MyCharts.aspx/GetDate", // MyCharts.aspx is a logical page created in sitecore physically it loads MasterLayout with MyCharts within that.
            data: "{}",
            contentType: "application/json",
            dataType: "json",
            success: function(msg) {
                // Replace the div's content with the page method's return.
                $(".Result").text(msg.d);
            }
        });
    });
});

当调试javascript尝试POST HelloWorld时,我得到:

"Message":"Authenticationfailed.","StackTrace":null,"ExceptionType":"System.InvalidOperationException"

链接1:http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/

相关问题:Getting "401 Unauthorized" error consistently with jquery call to webmethod

我的相关问题:https://stackoverflow.com/questions/7837532/get-my-html-and-javascript-to-perform-postback-ajax-call

3 个答案:

答案 0 :(得分:3)

如果此页面托管在Sitecore解决方案中,它看起来像是,则页面请求可能会通过Sitecore上下文。您可以编辑web.config以使此页面无法通过Sitecore上下文。有一个名为IgnoreUrlPrefixes的设置:

<!--  IGNORE URLS
  Set IgnoreUrlPrefixes to a '|' separated list of url prefixes that should not be
  regarded and processed as friendly urls (ie. forms etc.)
-->
<setting name="IgnoreUrlPrefixes" value="{Pipe-delimited list}" />

您可以更新此列表以包含特殊页面的路径。

答案 1 :(得分:2)

一些可能会让你走向解决方案的挑选:

  1. 如果您没有传递任何数据,则无需包含“数据”属性
  2. 您正在使用“POST”,但您没有发布任何数据 - 请改为使用“GET”
  3. 您说您的contentType和dataTypes是JSON,但Web方法返回一个字符串
  4. 发布/获取可能会解决问题 - 获取安全性远远超过Post。

    添加错误回调函数也可能有助于查看是否有关于请求失败原因的更多信息。

答案 2 :(得分:1)

我想要一个解决方案,使我能够通过sitecores上下文运行我正在发布帖子的页面。如果你不介意忽略上下文的页面,请看Mark Ursino的回答,它会像魅力一样。

我的回答如下:

使用Javascript:

function MySuperCoolFunction() {
    strUser1 = document.getElementById("Symbol1").innerHTML;
    strUser2 = document.getElementById("Symbol2").innerHTML;

    var join = strUser1 + "," + strUser2;

    __doPostBack('upCurrencyCharts', join);
}

的.ascx /的.aspx:

<asp:UpdatePanel runat="server" ID="upCurrencyCharts" OnLoad="upCurrencyCharts_onload">
    <ContentTemplate>

           // My Content Here  

     </ContentTemplate> 
 </asp:UpdatePanel> 

的.cs:

protected void upCurrencyCharts_onload(object sender, EventArgs e)
{
    string item1 = null;
    string item2 = null;

    if (IsPostBack)
    {      
       string items = Request["__EVENTARGUMENT"];
       string[] partsArray = items.Split(',');

            for (int i = 0; i < partsArray.Length; i++)
            {
                if (i == 0)
                {
                    item1 = partsArray[i];
                }

                if (i == 1)
                {
                    item2 = partsArray[i];
                }
            }
        }

        // do something with item1 and 2 here.. in mycase feed to database.

javascript在我的更新面板上强制回发事件,并将我发送的一串参数解析到我的网站的后端。在回发时触发Onload事件并触发我在onload事件中执行的任何操作,在这种情况下将项目放入数组中以拆分它们,然后将它们放入数据库中。 Simples。谢谢大家的帮助。 :d