سؤال

لقد كنت أكافح للحصول على مكالمة jQuery الخاصة بي إلى webmethod للعمل. لقد ارتدت من قبل الخادم مع استجابة "401 غير مصرح بها". يجب أن يكون لدي إعداد غير صحيح في الويب.

رؤيتك موضع تقدير!

استدعاء إلى وظيفة JS يستدعي مكالمة jQuery

button.OnClickAction = "PageMethod('TestWithParams', ['a', 'value', 'b', 2], 'AjaxSucceeded', 'AjaxFailed'); return false;";

وظيفة JavaScript التي تجعل مكالمة jQuery

function PageMethod(fn, paramArray, successFn, errorFn) {
var pagePath = window.location.pathname;
var urlPath = pagePath + "/" + fn;

//Create list of parameters in the form:  
//{"paramName1":"paramValue1","paramName2":"paramValue2"}  
var paramList = '';
if (paramArray.length > 0) {
    for (var i = 0; i < paramArray.length; i += 2) {
        if (paramList.length > 0) paramList += ',';
        paramList += '"' + paramArray[i] + '":"' + paramArray[i + 1] + '"';
    }
}
paramList = '{' + paramList + '}';

//Call the page method
$.ajax({
    type: "POST",
    url: pagePath + "/" + fn,
    contentType: "application/json; charset=utf-8",
    data: paramList,
    timeout: 10000,
    dataType: "json",
    success: function(result) { alert('Overjoyed'); },
    error: function(result) { alert('No joy'); }
});
}

طريقة الويب في الصفحة

    public partial class WebLayout : System.Web.UI.Page
{

    [WebMethod()]
    public static int TestNoParams()
    {
        return 1;
    }

    [WebMethod()]
    public static string TestWithParams(string a, int b)
    {
        return a + b.ToString();
    }
...

الرد كما هو موضح في وحدة التحكم في Firebug

json: {"Message":"Authentication failed.","StackTrace":null,"ExceptionType":"System.InvalidOperationException"}

و

"NetworkError: 401 Unauthorized - http://localhost/Care-Provider-Home/Profile/Personal-Profile.aspx/TestWithParams" TestWithParams

لقد نظرت إلى وقراءة المواقع المعتادة حول هذا الموضوع (Encosia ، وآخرون) ، ولكن للاستفادة. إما أن أفتقد قطعة حرجة ، أو أن هناك بعض التفاصيل الدقيقة في معلمات الأمان لبيئتي التي تمنع المكالمة.

فيما يلي بعض الحكايات الأخرى التي قد تؤثر على تشخيصك:

  • WebMethods في CodeBehind
  • باستخدام Sitecore CMS (لا يبدو أنه يعلق ، لا تعرف أبدًا)
  • IIS7
  • .NET 3.5
  • jQuery 1.3.2

إنني أتطلع إلى رؤيتك واتجاهك-شكرًا لك!

هل كانت مفيدة؟

المحلول

نعم ، لقد عملت! نظرًا لأن Sitecore CMS تقوم بإعادة كتابة عنوان URL لإنشاء عناوين URL ودية (يقوم بتجميع الصفحات في الطبقات ، ديناميكيًا ، على غرار مفهوم الصفحة الرئيسية) ، فقد حدث لي أنه قد يسبب بعض المشكلات التي تسببت في البداية في خطأ 401. لقد تحقق من ذلك من خلال إنشاء مشروع منفصل مع ASPX واحد-ومع بعض الأعمال تمكنت من استدعاء أساليب الويب والحصول على القيم باستخدام jQuery. قمت بعد ذلك بإنشاء ASPX متطابقة تقريبًا في جذر الويب الخاص بي ، لكنني أخبرت Sitecore أن تتجاهله عند تقديم طلب له (تجاهل regrlprefixes في الويب. شكرا لمساعدتك.

نصائح أخرى

يوفر استجابة JSON من وحدة التحكم Firebug أدلة IMO الأكثر إخبارًا. يشير النظام.

أولاً ، يعيد Googling على "InvalidOperationException WebMethod jQuery" المقالات التي تشير إلى أن مشاكل التسلسل يمكن أن تطرد هذا الاستثناء. لاستبعاد ذلك ، قم بتغيير "البيانات: paramlist" مؤقتًا إلى "البيانات:" {} ". بالإضافة إلى ذلك ، قم بإرفاق مصحح أخطاء ومعرفة ما إذا كان الاستثناء يحدث قبل تنفيذ الطريقة أو بعد اكتماله ويحاول تسلسل النتيجة.

إذا ظهرت الخطوات المذكورة أعلاه فارغة ، فقد ترغب في محاولة إعادة ضبط الويب إلى الويب النظيف.

ما شكل المصادقة الذي تستخدمه ، إن وجد؟ أول ما يتبادر إلى الذهن هو التأكد من تعيين الويب الخاص بك في IIS للسماح للمستخدمين المجهولين (إذا كنت ترغب بالفعل في إجراء المكالمة كمستخدم مجهول). أيضا أن وضع المصادقة الخاص بك في web.config لم يتم تعيينه على Windows عن طريق الخطأ. إذا لم تتمكن من السماح للمستخدمين المجهولين واستخدام مصادقة النماذج ، فسيتعين تسجيل الدخول قبل إجراء هذه المكالمة من صفحتك.

إذا تم تعيين ما سبق بشكل صحيح ، فحاول إجراء مكالمة منتظمة للخدمة من جانب الخادم للتأكد من أن المشكلة متسقة بغض النظر عن نقطة الاحتجاج بالخدمة.

انشر المزيد من الإعدادات إذا لم يتم حل المشكلة. أتمنى أن يساعدك هذا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top