首页 文章

Web API等效于Web服务[.asmx]

提问于
浏览
0

我是Web API的新手 . 我已经使用弃用的WebServices实现了一些Web服务方法[.asmx] - 使用Attributes [WebMethod],并且能够将我所有不同的方法放在.asmx文件中,并且能够通过我的ajax调用中的web方法名称来调用它们 .

我试图将其移至WebAPI,我没有看到我可以在WebAPI中使用不同的方法 .

例如,在我的WebService.asmx文件中,我可以声明:

[WebMethod]
    public void LoadReport()
    {
        ...
    }


 [WebMethod]
    public void LoadReport2()
    {
      ...
    }

但在WebAPI中,我可以使用的是Get(),Put(),Post()和Delete() .

我如何在Web API中声明这两种不同的方法?

2 回答

  • 0

    在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
    
  • 3

    在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");
            }
        }
    }
    

相关问题