我想制作简单的ASP.NET MVC应用程序(或称之为hhtp服务),这样我就可以使用POST方法发布一些简单的数据。 我想使用以下网址:
www.mysite.com/api/postdata
然而,我没有想出如何配置RouteConfig和contoller。 我最好的尝试是,我已经尝试了其他几十个:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "ApiPostData",
url: "api/postdata",
defaults: new { controller = "Api", action = "PostData" }
);
}
我的控制器:
public class ApiController : Controller
{
//[HttpPost]
public JsonResult PostData(PostData postData)
{
// save to database
retun Json(true);
}
}
Type PostData也被声明为更简单的对象。
为什么这不起作用?我总是得到错误404.我已经尝试了很多变化。阅读数百页,但不是单一的工作示例。 A也遇到过一些叫做区域的东西,但我拒绝相信这么多琐碎的任务需要这么多的编码和复杂功能。这不可能是真的。
编辑 - 更新:
我准备了更加琐碎的测试用例:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// this executes, checked it in debugger
routes.MapRoute(
name: "Test",
url: "api/test",
defaults: new { controller = "Api", action = "Test" }
);
}
public class ApiController : Controller
{
public ActionResult Test()
{
return Content("TEST TEST TEST");
}
}
所以,如果我用
来称呼它localhost/site/api/test
我应该得到“TEST TEST TEST”作为回应。错!!! 我得到的是
未找到与请求URI“http://localhost/site/api/test”匹配的HTTP资源。未找到与名为“test”的控制器匹配的类型。
发生了什么????
更新
我绝望地尝试了这个没有“文件夹”的直接版本。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Test2",
url: "test",
defaults: new { controller = "Api", action = "Test" }
);
}
我可以用
打电话www.mysite.com/test
它会返回TEST TEST TEST。
更新
这似乎是一个错误。 如果我将上面的MapRoute重新配置为目标
www.mysite.com/xxx/test
它有效。看来如果url包含字符串“api”就会中断。
答案 0 :(得分:1)
尝试这条路线:
routes.MapRoute(
name: "ApiPostDAta",
url: "api/{action}/{PostData}",
defaults: new { controller = "Api", action = "PostData", PostData = UrlParameter.Optional }
);
例如,这将与“www.mySite.com/Api/PostData/12345”等请求相匹配。