Вызов AJAX Webmethod возвращает 404 на MVC3 - PullRequest
2 голосов
/ 13 марта 2012

Я использую EXTJS 4 и загружаю свои магазины через AJAX-вызов в Webmethod в коде за страницей .aspx.Этот метод работал для всех моих проектов, пока я не попытался перенести работу EXTJS 4 в проект MVC3.Мои звонки теперь возвращают 404.

Ключевым моментом является то, что проект (и вызовы веб-метода EXTJS4) работает на компьютерах моих коллег - эта ошибка '404' затрагивает только мой компьютер.Любой вызов Webmethod, будь то один из них или написанный мной, возвращается как «Ресурс не найден».Что происходит?

Какой-нибудь код, если это поможет: загрузить магазин:

Ext.define('pr.store.Store-Items', {
    extend: 'Ext.data.Store',
    model: 'pr.model.Model-Items',
    pageSize: 200,
    groupField: 'groupID',
    autoLoad: { params: { start: 0, limit: 200 } },
    proxy: {
        type: 'ajax',
        //get data from json file for now
        headers: { 'Accept': 'application/json, text/javascript, */*; q=0.01', 'Content-Type': 'application/json; charset=utf-8' },
        url: '/Project/Data.ashx/GetData',           
        reader: {
            type: 'json',
            root: 'd.objects',
            totalProperty: 'd.totalCount'
        },
        extraParams: {
            where: Ext.encode(new Array(''))
            , difference: true
            , mode: 0
        }
    }
});

WebMethod

 [System.Web.Script.Services.ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Json, UseHttpGet=true)]
 [System.Web.Services.WebMethod]
 public static object GetData(int start, int limit, string[] where, bool difference, int mode)
 {
     //Code
 }

Ответы [ 5 ]

6 голосов
/ 21 мая 2014

Я дополнительно столкнулся с этой проблемой, поэтому удалил из Web.Config следующее.

<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

Обнаружено в обработчиках system.webServer>.


Кроме того, у нас также естьэти 3 дополнительных правила в файле Global.asax.cs:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
routes.IgnoreRoute("{resource}.asmx/{*pathInfo}");
3 голосов
/ 13 июля 2012

У меня была эта проблема с WebMethods на страницах aspx в гибридном сайте ASP.NET / MVC.

В IIS сопоставления обработчиков моего сайта были в неправильном порядке (сопоставления обработчиков -> Просмотреть упорядоченный список).

Обработчик ExtensionlessUrl должен иметь значение после PageHandlerFactory-ISAPI-4.0_32bit, PageHandlerFactory-Integrated-4.0 или любого другого аналогичного обработчика, используемого вашим сайтом, в зависимости от того, используете ли вы Integrated или Classic, 32- или 64-разрядная, и ваша версия .NET. Убедитесь, что вы проверили, с каким расширением файла работает каждый обработчик.

Если обработчик ExtensionlessUrl находится перед этими другими, он будет обрабатывать URL-адрес запроса как маршрут MVC и 404, когда не может его найти.

1 голос
/ 13 марта 2012

Может быть много разных вещей.Начиная с неправильной конфигурации IIS.Если вы вставите этот URL в браузер - вы получите что-нибудь.

0 голосов
/ 09 августа 2013

Я столкнулся с этим во время миграции сайта WebForms, чтобы иметь возможность использовать MVC. Так как мне просто нужно было временно пройти через него, и у меня в данный момент нет материалов MVC на сайте, я изменил RouteConfig так, чтобы URL-адрес маршрута по умолчанию был "MVC / {controller} / {action} / {id}". Это сделало так, чтобы мои существующие запросы «MyPage.aspx / webmethod» обрабатывались правильно, а не пытались трактовать «MyPage.aspx» как имя контроллера.

Для более долгосрочного решения (пока все WebForms или, по крайней мере, все веб-методы не будут заменены на MVC), я, вероятно, добавлю что-то вроде routes.IgnoreRoute("{page}.aspx/{*webmethod}");

Надеюсь, это поможет! ;)

0 голосов
/ 18 июня 2012

Я столкнулся с той же проблемой, и в результате я обнаружил, что I ASP.net 4.0 не был должным образом зарегистрирован в IIS.

Чтобы исправить это, я запустил:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -r
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...