Подтвердить что ты не робот

Как я могу переопределить файл .svc в моей таблице маршрутизации?

У меня есть этот URL-адрес, который использовался с одной из сообщений JSON с главного веб-сайта:

http://site/Services/api.svc/UpdateItem

Мы медленно обновляем веб-сайт до ASP.Net MVC 2 и не хотим нарушать текущий URL-адрес в системе. (Проблемы с обновлением JavaScript)

Я удалил /Services/api.svc и переместил логику для этого вызова API в следующий контроллер:

http://site/LegacyApi/UpdateItem

К сожалению, при добавлении маршрута я не могу заставить его переопределить api.svc и продолжать получать ошибку 404.

Маршрут:

    routes.MapRoute(
        "UpdateItemApi",
        "Services/api.svc/UpdateItem",
        new { controller = "LegacyApi", action = "UpdateItem" }
    );

В соответствии с MSDN по этой конкретной проблеме, маршрутизация должна пройти.

Любая помощь по этому поводу очень ценится.


Update

Маршрутизация для стандартных страниц .aspx работает по назначению, поэтому это похоже на нечто похожее на файлы .svc и на то, как они обрабатываются.

4b9b3361

Ответ 1

Проблема, с которой вы работаете, связана с поставщиком сборки, который зарегистрирован для файлов .svc. Этот поставщик сборки зарегистрирован файлом web.config на уровне машины.

Чтобы получить маршрутизацию для работы в этом случае, вам нужно удалить поставщика сборки в файле приложения web.config. Следующий фрагмент показывает, как удалить расширение .svc из списка поставщиков сборки.

  <system.web>
    <compilation debug="true" targetFramework="4.0">
        <buildProviders>
            <remove extension=".svc"/>            
        </buildProviders>
    ...

Ответ 2

Использование URL Rewrites Я смог сделать то, что эта ссылка была предложена, только назад:

  <system.webServer>
    <rewrite>
      <rules>
        <rule name="LegacyApiService" stopProcessing="true">
          <match url="^Services/api.svc/(.*)$" />
          <action type="Rewrite" url="LegacyApi/{R:1}" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>