powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Проблема с роутингом
7 сообщений из 7, страница 1 из 1
Проблема с роутингом
    #37677288
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В классическое ASP.NET приложение надо добавить роутинг запросов вида /rest/book/show/1 на RestHandler.ashx

В Global.asax пишу
Код: c#
1.
2.
3.
4.
5.
6.
protected void Application_Start(object sender, EventArgs e)
{
    var routes = RouteTable.Routes;
    routes.Ignore("{resource}.axd/{*pathInfo}");
    routes.MapPageRoute("rest", "{entity}/{action}/{id}", "~/RestHandler.ashx");
}



в Web.config пишу
Код: c#
1.
2.
3.
<handlers>
    <add name="RestHandler" verb="*" path="RestHandler.ashx" type="App.REST.RestHandler" />
</handlers>



создаю папку REST и в нее кладу RestHandler.cs
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
namespace App.REST
{
    public class RestHandler : IHttpHandler
    {
        public bool IsReusable
        {
            get { return true; }
        }

        public void ProcessRequest(HttpContext context)
        {
            context.Response.Write("Ok");
        }

    }
}



в браузере набираю http://MyServer/App/rest/book/show/1 — и получаю ошибку

Код: html
1.
2.
3.
4.
5.
6.
Ошибка сервера в приложении '/App'.
--------------------------------------------------------------------------------
Не удалось найти данный ресурс. 
Описание: HTTP 404. Возможно, искомый ресурс (или один из зависимых от него компонентов) удален, получил другое имя или временно недоступен.  Просмотрите следующий URL-адрес и проверьте, что он введен правильно. 

Запрошенный URL: /App/rest/book/show/1
...
Рейтинг: 0 / 0
Проблема с роутингом
    #37677297
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сам хэндлер работает - если набрать /App/RestHandler.ashx - получим "Ок".

если место
Код: c#
1.
RestHandler.ashx

в
Код: c#
1.
routes.MapPageRoute("rest", "{entity}/{action}/{id}", "~/RestHandler.ashx");

пишу
Код: c#
1.
"~/WebPage1.aspx"

- эта страница рендерится!

В чем проблема?
...
Рейтинг: 0 / 0
Проблема с роутингом
    #37677490
rudevelop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сам хэндлер работает - если набрать /App/RestHandler.ashx - получим "Ок".

А если набрать /RestHandler.ashx, то ответ есть?
...
Рейтинг: 0 / 0
Проблема с роутингом
    #37677516
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rudevelop,

авторсам хэндлер работает - если набрать /App/RestHandler.ashx - получим "Ок".
...
Рейтинг: 0 / 0
Проблема с роутингом
    #37678273
Centraloff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sp,

IIS отдает запросы обработчику ASP.NET только явно предназначенные ему т.е. .aspx, ashx и т.д. все остальные запросы он пытается обработать сам типа .html, .htm и проч.
Т.е. либо в настройках IIS указать чтобы он все запросы отдавал среде ASP.NET либо надо указывать не просто

/rest/book/show/1 , а /rest/book/show/1.aspx тогда будет работать.
...
Рейтинг: 0 / 0
Проблема с роутингом
    #37679018
rudevelop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sprudevelop,

авторсам хэндлер работает - если набрать /App/RestHandler.ashx - получим "Ок".

Я хотел уточнить работает ли путь /RestHandler.ashx, а /App/RestHandler.ashx - это уже другой путь.

Если в Web.config handler указан правильно, то открываться он должен как по первому, так и по второму адресу.

Также для тестов я бы попробовал в <add name="RestHandler" verb="*" path="RestHandler.ashx" type="App.REST.RestHandler" />

вместо path="RestHandler.ashx" указать другое имя (например, path="WebPage1.aspx"). Тогда handler должен открываться по пути /WebPage1.aspx

Если здесь все ок, то искать причину далее.
...
Рейтинг: 0 / 0
Проблема с роутингом
    #37679663
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реализовал, кому-нибудь сгодится:

Для создания RESTful протокола в классическом ASP.NET приложении необходимо

1.Создать класс HttpHandler для обработки запросов по шаблону:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
public void ProcessRequest(HttpContext context)
{
    RouteData = context.Request.RequestContext.RouteData;

    if (context.Request.HttpMethod == "GET")
    {
        .....
    }
    else
    {
        var form = context.Request.Form; string xmlParams;

        switch (context.Request.HttpMethod)
        {
            case "POST":
                .....
                break;

            case "PUT":
                .....
                break;

            case "DELETE":
                .....
                break;
        }

    }
}



2.Прописать роуты в Global.asax

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
private class RouteHandler : IRouteHandler
{
    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        return new NameOfClassOfYourHttpHandler();
    }
}

protected void Application_Start(object sender, EventArgs e)
{
    routes.Add(new Route("rest/{entity}", new RouteHandler()));
    routes.Add(new Route("rest/{entity}/{id}", new RouteHandler()));
}




3.В web.config выполнить переподключение модуля роутинга
Код: c#
1.
2.
3.
4.
5.
<modules>
    <!--http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html-->
    <remove name="UrlRoutingModule-4.0" />
    <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
</modules>




Вуаля! Все работает! Теперь из JavaScript на странице приложения пишем

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
$.ajax({
    url: 'rest/Books/1',
    type: 'GET'
})
$.ajax({
    url: 'rest/Books/15',
    type: 'DELETE'
})
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Проблема с роутингом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]