.NET MVC 4 WebAPI POST 不起作用

2024-01-03

核心问题:GET 有效,POST 无效。我是 WebAPI 的新手,所以我可能做了一些愚蠢的事情,但我在网上查了很多资料,试图找出为什么这不起作用。

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

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

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

控制器类:

public class CsvController : ApiController
{
    // GET api/csv
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

    // GET api/csv/name
    public string Get(string csvName)
    {
        return "value";
    }

    // POST - api/csv/LoadToSQL
    // Load a CSV to SQL
    [HttpPost]
    [ActionName("LoadToSQL")]
    public HttpResponseMessage LoadToSQL(
        string storageAccount,
        string accessKey,
        string containerName,
        string csvFileName,
        string connectionString,
        string targetDatabaseName,
        string targetTableName)
    {
        try
        {
            // Retrieve storage account from connection string.
            CloudStorageAccount blobStorage = CloudStorageAccount.Parse(storageAccount);

在本地启动并连接 Fiddler。尝试获取;作品:

尝试 POST - 失败:

我原来的实现刚刚

    // POST - api/csv
    // Load a CSV to SQL
    public HttpResponseMessage Post(

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

无论我做什么,它似乎都看不到针对该控制器的 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]属性。

希望有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET MVC 4 WebAPI POST 不起作用 的相关文章

随机推荐