API 无法识别 ApiController
API does not recognize ApiController
我在访问我的 ApiController 时遇到问题。当我拨打 API 电话时,我收到以下响应:
{
"Message": "No HTTP resource was found that matches the request URI 'http://localhost/myapp/api/data/abc'.",
"MessageDetail": "No action was found on the controller 'Data' that matches the request."
}
我想在 TopShelf 服务上创建一个 OWIN 网络 API,我可以从中获取一些数据。
我对此很陌生,所以我希望有人能向我解释我做错了什么。看起来很明显我看不到。
开始:
var apiHostConfiguration = new Dictionary<string, WebApiHostConfig> {{"webApi", new WebApiHostConfig {Endpoint = "/myapp" ,RequiresOAuth = false}}};
// Start OWIN host
const string baseAddress = "http://localhost";
foreach (var conf in apiHostConfiguration)
{
var app = new WebApiApp();
var opt = new StartOptions(baseAddress + conf.Value.Endpoint);
OwinApps.Add(WebApp.Start(opt, app.Configuration));
}
ApiConfig:
class WebApiApp
{
public void Configuration(IAppBuilder appBuilder)
{
var config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/",
defaults: new {}
);
config.Formatters.Clear();
config.Formatters.Add(new JsonMediaTypeFormatter());
config.EnableCors();
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
appBuilder.UseWebApi(config);
}
}
控制器:
[EnableCors("*", "*", "*")]
public class DataController : ApiController
{
[HttpGet]
public string Abc(string text)
{
var name = GetType().Name;
return $"{name} pings back «{text}»";
}
}
API 通话:
http://localhost/myapp/api/data/abc
替换
localhost
使用分配给您所在系统的私人 IP 运行 您的网络 service/API
你可以找到你的私有ip
在命令提示符处键入 ipconfig /all:如果您使用的是 windows
在命令提示符下输入 ifconfig:如果你在 mac
问题就像@AluanHaddad 在我的问题下面的评论中说的那样,我没有将 string text
从我的动作定义到路线中。
评论:
Your route template does not include an optional parameter.
It is also not very restful FWIW.
Try
routeTemplate: "api/{controller}/{action}/{text?}",
defaults: new {text = RouteParameter.Optional}
but consider that
routeTemplate: "api/{controller}/{text?}",
defaults: new {text = RouteParameter.Optional}
is likely preferable.
谢谢分配。
我在访问我的 ApiController 时遇到问题。当我拨打 API 电话时,我收到以下响应:
{
"Message": "No HTTP resource was found that matches the request URI 'http://localhost/myapp/api/data/abc'.",
"MessageDetail": "No action was found on the controller 'Data' that matches the request."
}
我想在 TopShelf 服务上创建一个 OWIN 网络 API,我可以从中获取一些数据。 我对此很陌生,所以我希望有人能向我解释我做错了什么。看起来很明显我看不到。
开始:
var apiHostConfiguration = new Dictionary<string, WebApiHostConfig> {{"webApi", new WebApiHostConfig {Endpoint = "/myapp" ,RequiresOAuth = false}}};
// Start OWIN host
const string baseAddress = "http://localhost";
foreach (var conf in apiHostConfiguration)
{
var app = new WebApiApp();
var opt = new StartOptions(baseAddress + conf.Value.Endpoint);
OwinApps.Add(WebApp.Start(opt, app.Configuration));
}
ApiConfig:
class WebApiApp
{
public void Configuration(IAppBuilder appBuilder)
{
var config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/",
defaults: new {}
);
config.Formatters.Clear();
config.Formatters.Add(new JsonMediaTypeFormatter());
config.EnableCors();
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
appBuilder.UseWebApi(config);
}
}
控制器:
[EnableCors("*", "*", "*")]
public class DataController : ApiController
{
[HttpGet]
public string Abc(string text)
{
var name = GetType().Name;
return $"{name} pings back «{text}»";
}
}
API 通话:
http://localhost/myapp/api/data/abc
替换
localhost
使用分配给您所在系统的私人 IP 运行 您的网络 service/API
你可以找到你的私有ip
在命令提示符处键入 ipconfig /all:如果您使用的是 windows
在命令提示符下输入 ifconfig:如果你在 mac
问题就像@AluanHaddad 在我的问题下面的评论中说的那样,我没有将 string text
从我的动作定义到路线中。
评论:
Your route template does not include an optional parameter.
It is also not very restful FWIW.
Try
routeTemplate: "api/{controller}/{action}/{text?}",
defaults: new {text = RouteParameter.Optional}
but consider that
routeTemplate: "api/{controller}/{text?}",
defaults: new {text = RouteParameter.Optional}
is likely preferable.
谢谢分配。