繁体   English   中英

相当于Web服务[.asmx]的Web API

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM