WCF REST с чистым URL - PullRequest
       11

WCF REST с чистым URL

0 голосов
/ 24 августа 2010

Я рассматриваю возможность размещения службы отдыха WCF, созданной на IIS 7. URL-адрес для доступа к моей службе будет выглядеть примерно так:

api.mycompany.com / applicationName / Service.svc / users / 1347

Недавно я искал реализацию REST API с чистым URL-адресом, таким как Yahoo API

social.yahooapis.com / v1 /user / {guid} / contacts

Мне интересно, какой будет лучшая хост-среда WCF (например, Windows Service) или какое-либо решение (например, модуль перезаписи URL), учитывая, что я не хочу иметь приложениеname и .svc в моем URL, чтобы у меня был полностью чистый URL для моего REST API

Ответы [ 3 ]

1 голос
/ 18 ноября 2011

Вы можете использовать новый шаблон WebApi в .NET 4, который позволяет указывать маршрут в global.asax. Это избавляет от файла SVC полностью. Вам нужно иметь AspNetCompatilbityMode = true. Смотрите образец ниже:

[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class RestService
{
    // TODO: Implement the collection resource that will contain the SampleItem instances

    private static List<SampleItem> sampleCollection = new List<SampleItem>();

    [WebGet]
    public List<SampleItem> GetCollection()
    {
        // TODO: Replace the current implementation to return a collection of SampleItem instances
        if (sampleCollection.Count == 0)
        {
            sampleCollection = new List<SampleItem>();
            sampleCollection.Add(new SampleItem() { Id = 1, StringValue = "Hello 1" });
            sampleCollection.Add(new SampleItem() { Id = 2, StringValue = "Hello 2" });
            sampleCollection.Add(new SampleItem() { Id = 3, StringValue = "Hello 3" });
            sampleCollection.Add(new SampleItem() { Id = 4, StringValue = "Hello 4" });
            sampleCollection.Add(new SampleItem() { Id = 5, StringValue = "Hello 5" });
        }
        return sampleCollection;
    }
}

Ваш web.config будет иметь следующее:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </modules>
  </system.webServer>
<system.serviceModel>
   <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    <standardEndpoints>
      <webHttpEndpoint>
        <!-- 
            Configure the WCF REST service base address via the global.asax.cs file and the default endpoint 
            via the attributes on the <standardEndpoint> element below
        -->        
        <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true"/>
      </webHttpEndpoint>
    </standardEndpoints>
  </system.serviceModel>

И, наконец, ваш Global.asax выглядит следующим образом:

public class Global : HttpApplication
{
    void Application_Start(object sender, EventArgs e)
    {
        RegisterRoutes();
    }

    private void RegisterRoutes()
    {
        // Edit the base address of Service1 by replacing the "Service1" string below
        RouteTable.Routes.Add(new ServiceRoute("RestService", new WebServiceHostFactory(), typeof(RestService)));
    }
}

Теперь URL для вашего сервиса будет:

http://localhost/SampleApp/RestService/GetCollection

Теперь у вас есть чистые и правильные URL REST

0 голосов
/ 24 августа 2010

Вы можете использовать UriTemplate Class, также загляните в WCF Rest Starter Kit.

Здесь - хорошее объяснение.

0 голосов
/ 24 августа 2010

Для этого можно использовать модуль перезаписи URL в IIS 7.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...