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

时间:2017-04-05 19:43:40

标签: c# asp.net-web-api asp.net-web-api2

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

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

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

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


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

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

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

2 个答案:

答案 0 :(得分:3)

在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  

答案 1 :(得分:0)

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