如何在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 路由中的嵌套资源
Laravel - 当 API 路由错误或找不到时如何显示 JSON?