tutorial example create wcf rest

example - ¿Cómo eliminar la extensión ".svc" en el servicio RESTful WCF?



wcf service c# example (7)

Agregue esto a su global.asax

private void Application_BeginRequest(object sender, EventArgs e) { Context.RewritePath(System.Text.RegularExpressions.Regex.Replace( Request.Path, "/rest/(.*)/", "/$1.svc/")); }

Esto reemplazará / rest / Service1 / arg1 / arg2 por /Service1.svc/arg1/arg2

En mi conocimiento, RESTful WCF todavía tiene ".svc" en su URL.

Por ejemplo, si la interfaz de servicio es como

[OperationContract] [WebGet(UriTemplate = "/Value/{value}")] string GetDataStr(string value);

El URI de acceso es como " http://machinename/Service.svc/Value/2 ". Según entiendo, parte de la ventaja de REST es que puede ocultar los detalles de la implementación. Un RESTful URI como " http://machinename/Service/value/2 " puede ser implementado por cualquier marco RESTful, pero un " http://machinename/Service.svc/value/2 " expone su implementación es WCF.

¿Cómo puedo eliminar este host ".svc" en el URI de acceso?



En IIS 7 puede usar el Módulo de reescritura de URL como se explica en esta publicación de blog.

En IIS 6 puede escribir un módulo http que reescribirá la url:

public class RestModule : IHttpModule { public void Dispose() { } public void Init(HttpApplication app) { app.BeginRequest += delegate { HttpContext ctx = HttpContext.Current; string path = ctx.Request.AppRelativeCurrentExecutionFilePath; int i = path.IndexOf(''/'', 2); if (i > 0) { string svc = path.Substring(0, i) + ".svc"; string rest = path.Substring(i, path.Length - i); ctx.RewritePath(svc, rest, ctx.Request.QueryString.ToString(), false); } }; } }

Y hay un buen example cómo lograr URLs sin extensión en IIS 6 sin usar módulos ISAPI de terceros o mapeo de comodines.


En IIS6 o 7, puede usar IIRF , un filtro de reescritura gratuito. Aquí está la regla que utilicé:

# Iirf.ini # RewriteEngine ON RewriteLog c:/inetpub/iirfLogs/iirf-v2.0.services RewriteLogLevel 3 StatusInquiry ON RemoteOk CondSubstringBackrefFlag * MaxMatchCount 10 # remove the .svc tag from external URLs RewriteRule ^/services/([^/]+)(?<!/.svc)/(.*)$ /services/$1.svc/$2 [L]



Sé que esta publicación ya es un poco antigua, pero si usa .NET 4, debería usar el enrutamiento de URL (introducido en MVC, pero incluido en el núcleo de ASP.NET).

En el inicio de su aplicación (global.asax), solo tiene la siguiente línea de configuración de ruta para configurar la ruta predeterminada:

RouteTable.Routes.Add(new ServiceRoute("mysvc", new WebServiceHostFactory(), typeof(MyServiceClass)));

entonces sus URL se verían así:

http://servername/mysvc/value/2

HTH