我使用 MySQL
DB 在 Visual Studio 2015
中创建了一个 WEB API
。我有三个 GET 方法。第一个是给出所有数据,第二个是根据 ID 给出结果,第三个是根据序列号给出结果。前两种方法工作正常,但最后一种方法则不然。我还在解决方案中添加了多个路由。下面是我的代码
WebApiConfig
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "GetByMsn",
routeTemplate: "api/{controller}/{action}/{msn}",
defaults: null,
constraints: new { msn = @"^[a-z]+$" }
Controller
public HttpResponseMessage Get()
{
try
{
return Request.CreateResponse(HttpStatusCode.Found, mEntities.meters_info_dev.ToList());
}
catch (Exception ex)
{
return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex);
}
}
// GET by ID
public HttpResponseMessage GetByID(int id)
{
try
{
return Request.CreateResponse(HttpStatusCode.Found, mEntities.meters_info_dev.SingleOrDefault(m => m.id == id));
}
catch (Exception ex)
{
return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex);
}
}
// GET by serial number
public HttpResponseMessage GetByMsn(string msn)
{
try
{
return Request.CreateResponse(HttpStatusCode.Found, mEntities.meters_info_dev.SingleOrDefault(m=> m.meter_msn == msn));
}
catch
{
return Request.CreateErrorResponse(HttpStatusCode.NotFound, "No Data found");
}
}
GetByMsn
是不起作用的。我尝试过更改路线,但结果仍然相同。 solution 1和 solution 2给出的对我不起作用。
任何帮助将不胜感激。
最佳答案
config.Routes.MapHttpRoute(
name: "GetByMsn",
routeTemplate: "api/{controller}/{action}/{msn}",
defaults: null,
constraints: new { msn = @"^[a-z]+$" }
上面的约束是按字母顺序排列的,我只需将其更改为 @"^[0-9]+$"
,它就开始为我工作。
关于mysql - 无法在单个 Controller 中运行多个 GET 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46426743/