如何在C#Web API中正确设置路由,以便错误的路由失败?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在C#Web API中正确设置路由,以便错误的路由失败?相关的知识,希望对你有一定的参考价值。

我正在尝试在ASP.NET 2.5中创建我的Web API,以便我可以调用像http://localhost:8080/api/solarplant/active这样的URL来调用下面的Active方法,并调用http://localhost:8080/api/solarplant?name=SiteNameHere来获取GetByName方法。

当我只调用http://localhost:8080/api/solarplant时,它似乎也调用了Active方法,当我使用“name”的查询参数调用Active方法时,它可以工作。如何让我的网址只能按照上面第一段所述的方式工作,并且只能这样工作?我不想只调用/ solarplant或者能够在Active调用结束时添加name参数并获得结果。

using SolarFaultValidationService.Services;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace SolarFaultValidationService.Controllers
{
[RoutePrefix("api/solarplants")]
public class SolarPlantController : ApiController
{
    private SolarPlantRepository solarPlantRepository;

    public SolarPlantController()
    {
        this.solarPlantRepository = new SolarPlantRepository();
    }

    // GET api/solarplants
    [ActionName("Active")]
    [HttpGet]
    public IHttpActionResult Active()
    {
        string data = solarPlantRepository.GetActiveSolarPlants();
        HttpResponseMessage httpResponse = Request.CreateResponse(HttpStatusCode.OK, data);
        return ResponseMessage(httpResponse);
    }

    //GET api/solarplants/sitenamehere
    [Route("{name:string}")]
    public HttpResponseMessage GetByName(string name)
    {
        string response = solarPlantRepository.GetSolarPlantByName(name);
        HttpResponseMessage httpResponse = Request.CreateResponse(HttpStatusCode.OK, response);
        return httpResponse;
    }
}

}

答案

以下应该工作

// GET api/solarplants/active
[HttpGet("Active")]
public IHttpActionResult Active()
{ ... }

//GET api/solarplants?name=name
[HttGet]
public HttpResponseMessage GetByName([FromQuery]string name)
{ ... }

以上是关于如何在C#Web API中正确设置路由,以便错误的路由失败?的主要内容,如果未能解决你的问题,请参考以下文章

正确处理 ASP.net MVC 4 Web Api 路由中的嵌套资源

如何将请求路由到正确的租户 API 网关?

Laravel - 当 API 路由错误或找不到时如何显示 JSON?

ASP.NET Web API 中带有可选参数的属性路由

如何设置 API url,以便只有 IP 白名单客户端可以访问 API,而 Web 应用程序本身仍然可供所有人访问?

长Web API路由属性除以零错误