Можно ли перенаправить URL-адрес веб-службы (ASMX) на сайт ASP.NET MVC? - PullRequest
4 голосов
/ 20 июня 2009

Я видел, как вы можете добавлять собственные маршруты в WebForms, используя такой код, как этот.

public class WebFormsRouteHandler : IRouteHandler
{
    public string VirtualPath { get; set; }

    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        // Compiles ASPX (if needed) and instantiates the web form
        return (IHttpHandler) BuildManager.CreateInstanceFromVirtualPath(VirtualPath, typeof (IHttpHandler));
    }
}

Я пытаюсь заставить подобную вещь работать, но для файлов веб-службы (TestService.asmx.) Этот предыдущий метод вызывает исключение, потому что страница не наследуется от IHttpHandler. Я видел другой код, который использует WebServiceHandlerFactory, например,

return new WebServiceHandlerFactory().GetHandler(context, requestType, url, pathTranslated);

Это возвращает IHttpHandler, как мне нужно, но ему нужен переданный HttpContext, но единственная вещь, к которой у меня тоже есть доступ как часть RequestContext, - это HttpContextBase. Из того, что я могу сказать, я не могу конвертировать в HttpContext из этого.

Есть идеи? Или, может быть, по-другому? Я пытаюсь контролировать URL-адреса моих веб-сервисов через обычную систему маршрутизации. Примером является то, что TestService.asmx должен называться ExampleTestService /.

Ответы [ 2 ]

1 голос
/ 28 сентября 2011

Вот как я это делаю:

 Return New WebServiceHandlerFactory().GetHandler(HttpContext.Current, "*", "/Build/WebService.asmx", HttpContext.Current.Server.MapPath(aspxToLoad))
1 голос
/ 20 июня 2009

Интересная идея. Я не знал, что вы могли бы использовать веб-формы таким образом. В настоящее время мы интегрируем старые приложения для веб-форм с IgnoreRoutes. Я обязательно добавлю ваш вопрос в закладки;)

Но, возможно, я могу помочь вам с вашей проблемой. Старый добрый HttpContext все еще существует, он просто обернут MVC в дружественный макет HttpContextBase.

Вы можете получить оригинал HttpContext с помощью

var context = System.Web.HttpContext.Current;

В контроллере необходимо полностью указать тип, чтобы отличить его от свойства контроллера, которое называется HttpContext

...