C# .NET MVC 4 WebAPI POST不工作

C# .NET MVC 4 WebAPI POST不工作,c#,asp.net-mvc-4,asp.net-web-api,C#,Asp.net Mvc 4,Asp.net Web Api,核心问题:获得成功,发布失败。我是WebAPI新手,所以我可能在做一些愚蠢的事情,但我已经在“网络”上翻了很多遍,试图弄清楚为什么这不起作用 相当简单的WebAPI C#应用程序。我试图将其归结为非常简单的路线: config.Routes.MapHttpRoute( 名称:“DefaultApi”, routeTemplate:“api/{controller}/{id}”, 默认值:新建{id=RouteParameter.Optional} ); //添加提供操作的路由,即api/csv/

核心问题:获得成功,发布失败。我是WebAPI新手,所以我可能在做一些愚蠢的事情,但我已经在“网络”上翻了很多遍,试图弄清楚为什么这不起作用

相当简单的WebAPI C#应用程序。我试图将其归结为非常简单的路线:

config.Routes.MapHttpRoute(
名称:“DefaultApi”,
routeTemplate:“api/{controller}/{id}”,
默认值:新建{id=RouteParameter.Optional}
);
//添加提供操作的路由,即api/csv/LoadToSQL
config.Routes.MapHttpRoute(
名称:“ActionApi”,
routeTemplate:“api/{controller}/{action}”
);
控制器类:

但这不起作用,所以我开始尝试添加特定的路由和动词修饰

无论我做什么,它似乎都看不到针对该控制器的POST操作

有什么想法吗

更新-根据下面的答案,正确的方法是:

        // Add a route where action is supplied, i.e. api/csv/LoadToSQL
        config.Routes.MapHttpRoute(
            name: "ActionApi",
            routeTemplate: "api/{controller}/{action}/{storageAccount}/{accessKey}/{containerName}/{csvFileName}/{connectionString}/{targetDatabaseName}/{targetTableName}"
        );

这将显示POST请求的所有参数。

如果愿意,您可以替换您的方法,使其更清晰

1-使用选项声明一个类

public class LoadToSqlData
{
   public string storageAccount {get; set;}
   public string accessKey {get; set;}
   public string containerName {get; set;}
   public string csvFileName {get; set;}
   public string connectionString {get; set;}
   public string targetDatabaseName {get; set;}
   public string targetTableName {get; set;}
}
2-声明您的方法为:

[HttpPost]
[ActionName("ActionApi")]
[Route("api/Csv/LoadToSQL")]
public HttpResponseMessage LoadToSQL([FromBody]LoadToSqlData data)
注意
[Route]、[ActionName]
[FromBody]
属性的用法


希望有帮助

您需要多个参数,但路由只有一个,因此无法解析您的方法。要么将所有参数添加到路由{storageAccount}/{accessKey}/etc..,要么传递一个具有所需属性的对象。能否提供示例post请求?好的,就像我说的。。。愚蠢的事。谢谢@dbugger。。。事实上就是这样。我试图将参数作为查询参数传递。将更新路由以显示使此工作正常的修复程序。这是有效的-正如前面的建议一样,但正如前面的响应者所指出的,这可能是一种更好的方式。我更新了它以修复一个小错误-类的成员应该是公共的。
public class LoadToSqlData
{
   public string storageAccount {get; set;}
   public string accessKey {get; set;}
   public string containerName {get; set;}
   public string csvFileName {get; set;}
   public string connectionString {get; set;}
   public string targetDatabaseName {get; set;}
   public string targetTableName {get; set;}
}
[HttpPost]
[ActionName("ActionApi")]
[Route("api/Csv/LoadToSQL")]
public HttpResponseMessage LoadToSQL([FromBody]LoadToSqlData data)