ASP.NET MVC: jQuery-жайы Пайдаланушының URL-ге өтуіне жол бермеу

Біз Ajax қосымшасын жасап жатырмыз және қолданбаның әртүрлі беттерін жүктеу үшін jQuery Address плагинін пайдаланамыз. Сондықтан біздің сайт үшін URL мекенжайлары ұқсас: www.app.com #/SomeController/SomeAction. Мұндай url бойынша шарлау қолданба үшін әдепкі жолды жүктейді, содан кейін jQuery мекенжайы SomeController/SomeAction url-ді беттің div-ге жүктеу үшін пайдаланылады.

Мәселе мынада, браузердегі URL мекенжайын теру арқылы пайдаланушы әлі де www.app.com/SomeController/SomeAction (хэш белгісі) болмайды. Пайдаланушыны беттерге тікелей қатынасуын болдырмау және беттердің Ajax сұрауы арқылы жүктелгенін тексеру үшін оларда хэш белгісі бар болуын қалайсыз?

1
қосылды автор Robert Harvey, көзі

3 жауаптар

Request.isajaxrequest() тексерілген сүзгіні жасай аласыз. Сіз әдепкі жолдан бөлек, сұралмаған сұранымдардан бас тартасыз.

Мен мұны ең жақсы әдіс деп білемін.

1
қосылды

Әдепкі жолға дейін қосу үшін маршрутты жасаңыз, келесідей:

routes.MapRoute(
    "404 non-hashed",
    "{*fullPath}",
    new { controller = "Error", action = "Show404" },
    new { fullPath = @"^(?!#).+" }
);

Бұл маршрут хэш таңбасымен басталмаған кез келген сұранысты өңдейді. Хэш таңбаларымен басталатын кез келген сұрау маршрут шектеулерін сәтсіз аяқтайды және әдепкі жолға өтеді.

404 бетті немесе кейбір реттелетін қате бетін көрсету үшін контроллер мен әрекетті жасаңыз және орнатыңыз.

1
қосылды

counsellorben дұрыс, сіз заңды клиенттерді немесе бағдарламаларды белгілі бір ресурсқа сұрауды шектеу үшін маршруттау трюктерін жасай аласыз, бірақ сіз өзіңізді соғудан қорғай алмайсыз (Сиддер немесе басқа құрал). Counsellorben ұсынған тәсіл қолданушының шатастырудан аулақ болуға және бағдарламаның «API» аймағын шектеуге мүмкіндік береді. Әрине, сіз тек қана # терең сілтемелерге тәуелді қолданба болмауыңыз керек, себебі бұл SEO-мен проблемалар туғызады және т.б. Бірақ бұл басқа пікірталас.

Сүзгіден гөрі басқа амал, әрекет әдісіне төмендегіні қосуға болады

if (this.HttpContext.Request.IsAjaxRequest() != true)
            return RedirectToAction("Index");

мұнда стандартты тәжірибе бар, якорь бос немесе күлгін href сипатын беру үшін және басу оқиғасы AJAX кері шақыруларын орындайды ма? Осылайша, егер пайдаланушы еренсілтемені көшірсе, ол автоматты түрде дұрыс URL-мекенжайын береді.

0
қосылды
Пікіріңізге рахмет. Мен SEO проблемасына толығымен келісемін, бірақ бұл беттер ботпен тексерілмейтін болады, себебі пайдаланушыға бағдарламаға қатынасу үшін аутентификация қажет.
қосылды автор Nick Olsen, көзі