[英]Web API equivalent to Web Service [.asmx]
我是Web API的新手。 我已经使用不推荐使用的WebServices-属性[WebMethod]实现了某些Web服务方法[.asmx],并且能够将所有不同的方法放置在.asmx文件中,并且能够在我的ajax调用中通过webmethod名称进行调用。
我正在尝试将其移至WebAPI,但我看不到我可以在WebAPI中使用其他方法。
例如,在我的WebService.asmx文件中,我可以声明:
[WebMethod]
public void LoadReport()
{
...
}
[WebMethod]
public void LoadReport2()
{
...
}
但是在WebAPI中,我只能利用Get(),Put(),Post()和Delete()。
如何在Web API中声明这两种不同的方法?
在Web API中使用属性路由。
例如:
[RoutePrefix("api/Data")]
public class DataController : ApiController
{
[Route("LoadReport")]
[HttpGet]
public HttpResponseMessage LoadReport()
{
...
}
[Route("LoadReport2")]
[HttpGet]
public HttpResponseMessage LoadReport2()
{
...
}
您可以通过调用来访问这些方法
http://localhost:<port>/api/sample/LoadReport
http://localhost:<port>/api/sample/LoadReport2
如果使用.Net 4.5.2,请确保启用了“属性路由”。 将以下行添加到App_Start \\ WebAPiConfig.cs文件的Register
方法下:
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes(); //enable Attribute routing
在WebApiConfig.cs中:
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
在我的控制器中:
namespace WebAPIa.Controllers
{
// [Route("api/[controller]")]
public class DataController : ApiController
{
[ActionName("LoadReport")]
[HttpGet]
public HttpResponseMessage LoadReport()
{
return Request.CreateResponse("Testing LoadReport");
}
[ActionName("LoadReport2")]
[HttpGet]
public HttpResponseMessage LoadReport2()
{
return Request.CreateResponse("Testing LoadReport2");
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.