为什么有些C#api方法需要[HttpPost]而有些则不需要?

维蒂南特·坎苏万

我在同一个控制器文件中有两种方法可以从JavaScript ajax接收数据。

第一个C#API控制器代码是

public class News
{
    public int ID { get; set; }
    public string Title { get; set; }
    public string Intro { get; set; }
    public string Story { get; set; }
    public string Images { get; set; }
    public DateTime DateModified { get; set; }
    public DateTime DateCreated { get; set; }
}

public void InsertData([FromBody]News newsinfo)
{
    conn.ConnectionString = mdc.ConnectonString;
    cmd.Connection = conn;
    if (newsinfo.ID > 0)
    {
        cmd.CommandText = "UPDATE [News] SET [Title] = N'" + newsinfo.Title + "', [Intro] = N'" + newsinfo.Intro + "', [Story] = N'" + newsinfo.Story + "', [Images] = N'" + newsinfo.Images + "', [DateModified] = @DateModified WHERE [ID] = " + newsinfo.ID;
        cmd.Parameters.AddWithValue("@DateModified", DateTime.Now);

    }
    else
    {
        cmd.CommandText = "INSERT INTO [News] ([Title], [Intro], [Story], [Images], [DateCreated], [DateModified]) VALUES (N'" + newsinfo.Title + "', N'" + newsinfo.Intro + "', N'" + newsinfo.Story + "', '" + newsinfo.Images + "', @DateCreated, @DateModified)";

        cmd.Parameters.AddWithValue("@DateCreated", DateTime.Now);
        cmd.Parameters.AddWithValue("@DateModified", DateTime.Now);
    }
    conn.Open();
    int send = cmd.ExecuteNonQuery();
    conn.Close();
}

上面的代码将从此JavaScript接收数据

function InsertData() {
    var newsData = {
            ID: editingID,
            Title: $("#txbTitle").val().replace(/[\"]/gm, "\"").replace(/[\']/gm, "''"),
            Intro: $("#txbIntro").val().replace(/[\"]/gm, "\"").replace(/[\']/gm, "''"),
            Story: $(".ql-editor").html().replace(/[\"]/gm, "\"").replace(/[\']/gm, "''").replace(/http.\/\/[a-z:0-9]+/gm, "").replace(/\/Images.Temp\//gm, "/Images/News/"),
            Images: imagesToUpload.replace(/Temp/gm, "News")
   $.ajax({
       url: "api/Database/InsertData",
       method: "POST",
       data: newsData,
       success: function (result, status, xhr) {
           if (imagesToUpload != "") {
               var fileslist = {
                   filenames: ""
               }
               fileslist.filenames = imagesToUpload;
               console.log(fileslist);
               $.ajax({
                   url: "api/FileUpload/StoreImages",
                   method: "POST",
                   data: fileslist,
                   success: function (result, status, xhr) {
                       ViewState();
                   },
                   error: function (xhr, status, error) {
                       alert(error);
                   }
               });
           }
           else if (imagesToUpload == "") {
               ViewState();
           }
       },
       error: function (xhr, status, error) {
           alert(error);
       }
    });
}

第二个C#API控制器代码是

public class NewsId
{
    public int[] id { get; set; }
}

[HttpPost]
public void DeleteData([FromBody]NewsId newsId)
{
    conn.ConnectionString = mdc.ConnectonString;
    cmd.Connection = conn;
    if (newsId.id.Length > 0)
    {
        foreach (int id in newsId.id)
        {
            cmd.CommandText = "SELECT [Images] FROM [News] WHERE [Id] = " + id;
            conn.Open();
            SqlDataReader reader = cmd.ExecuteReader();
            string images = "";
            while (reader.Read())
            {
                images = reader[0].ToString();
            }
            conn.Close();
            string[] files = Regex.Split(images, ";");
            foreach (string file in files)
            {
                if (file != "")
                {
                    string path = HttpContext.Current.Server.MapPath("~") + Regex.Replace(file, "/Images", "Images");
                    File.Delete(path); // /Images/Temp/
                }
            }

            cmd.CommandText = "DELETE FROM [News] WHERE [Id] = " + id;
            conn.Open();
            int d = cmd.ExecuteNonQuery();
            conn.Close();
        }
    }
}

它从这个JavaScript接收数据

function DeletingNews(news_id) {
    var newsId = {
        id: news_id // news_id is Array 
    }
    $.ajax({
        url: "api/Database/DeleteData",
        method: "POST",
        data: newsId,
        success: function (result, status, xhr) {
            ViewState();
        },
        error: function (xhr, status, error) {
            alert(error);
        }
    });
}

我不明白为什么第一代码不需要[HttpPost]而第二代码需要它,否则Ajax将返回

405方法不允许

两者现在都运行良好,但是我不明白为什么有些人需要[HttpPost]而另一些人却不需要?

山塔努

默认情况下,API Controller提供了get,put,post和delete

默认情况下,Get All是说IEnumerable GetAll()

默认情况下,Get是字符串Get(int id)

默认情况下Post是void Post([FromBody] object value)

默认情况下,Put为void Put(int id,[FromBody] object value)

默认情况下删除是无效的Delete(int id)

请仔细查看所使用的签名以及基于这些签名的返回类型。

因此,现在,如果您要添加新操作,请说Post,那么您需要使用HttpPost属性装饰它,以便控制器了解要调用的操作

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么有些库需要嵌入而有些则不需要?

来自分类Dev

为什么/为什么有些类需要每个可能的参数,而有些则不需要?

来自分类Dev

为什么列表结构中的某些功能需要“列表”前缀,而有些则不需要?

来自分类Dev

为什么有些 JavaScript 函数需要创建一个新变量,而有些则不需要?

来自分类Dev

为什么有些程序需要-h而另一些则不需要

来自分类Dev

在 PyQT 中为什么有些小部件在调用它们之前需要“self”参数,而有些则不需要

来自分类Dev

为什么有些类需要main方法,而另一些则不需要呢?

来自分类Dev

为什么有些程序需要安装,而其他程序则不需要?

来自分类Dev

为什么有些角度指令需要双重卷曲,而另一些则不需要?

来自分类Dev

为什么有些工具(例如 dd)不需要挂载点来处理设备?

来自分类Dev

为什么有些文本在WPF中会消失,而有些则不会

来自分类Dev

为什么有些程序需要Path值,而另一些程序在Windows中却不需要?

来自分类Dev

为什么有些应用程序需要首先“安装”才能运行,而其他应用程序则不需要?

来自分类Dev

为什么某些内置javascript方法是静态的而有些则不是呢?

来自分类Dev

为什么有些非root程序可以双击执行而有些则不能?

来自分类Dev

为什么有些数组值会被覆盖,而有些则不会呢?的PHP

来自分类Dev

正则表达式多个带有可选参数的URL,一些URL需要反向引用,有些则不需要

来自分类Dev

为什么有些原语有字节码,而有些则没有?

来自分类Dev

为什么有些Java setter方法自动成为Kotlin属性,而有些却没有?

来自分类Dev

为什么有些 Angular 模块会导入而有些却不会?

来自分类Dev

为什么有些函数参数存储在堆栈上而有些存储在堆上?

来自分类Dev

为什么有些快照很快,而有些快照那么慢?

来自分类Dev

为什么有些行可以插入而有些行不能?

来自分类Dev

有些 CSS 文件需要“text/css”,而有些则需要“stylesheet/css”类型

来自分类Dev

为什么有些算术指令有有符号/无符号变体,而有些则没有

来自分类Dev

为什么有些 C API 不遵循封装

来自分类Dev

为什么有些UWP项目有project.json而有些却没有?

来自分类Dev

为什么有些对象没有在这个 .splice() 中被移除而有些是?

来自分类Dev

为什么有些电子邮件ID被接受而有些却没有PHP

Related 相关文章

  1. 1

    为什么有些库需要嵌入而有些则不需要?

  2. 2

    为什么/为什么有些类需要每个可能的参数,而有些则不需要?

  3. 3

    为什么列表结构中的某些功能需要“列表”前缀,而有些则不需要?

  4. 4

    为什么有些 JavaScript 函数需要创建一个新变量,而有些则不需要?

  5. 5

    为什么有些程序需要-h而另一些则不需要

  6. 6

    在 PyQT 中为什么有些小部件在调用它们之前需要“self”参数,而有些则不需要

  7. 7

    为什么有些类需要main方法,而另一些则不需要呢?

  8. 8

    为什么有些程序需要安装,而其他程序则不需要?

  9. 9

    为什么有些角度指令需要双重卷曲,而另一些则不需要?

  10. 10

    为什么有些工具(例如 dd)不需要挂载点来处理设备?

  11. 11

    为什么有些文本在WPF中会消失,而有些则不会

  12. 12

    为什么有些程序需要Path值,而另一些程序在Windows中却不需要?

  13. 13

    为什么有些应用程序需要首先“安装”才能运行,而其他应用程序则不需要?

  14. 14

    为什么某些内置javascript方法是静态的而有些则不是呢?

  15. 15

    为什么有些非root程序可以双击执行而有些则不能?

  16. 16

    为什么有些数组值会被覆盖,而有些则不会呢?的PHP

  17. 17

    正则表达式多个带有可选参数的URL,一些URL需要反向引用,有些则不需要

  18. 18

    为什么有些原语有字节码,而有些则没有?

  19. 19

    为什么有些Java setter方法自动成为Kotlin属性,而有些却没有?

  20. 20

    为什么有些 Angular 模块会导入而有些却不会?

  21. 21

    为什么有些函数参数存储在堆栈上而有些存储在堆上?

  22. 22

    为什么有些快照很快,而有些快照那么慢?

  23. 23

    为什么有些行可以插入而有些行不能?

  24. 24

    有些 CSS 文件需要“text/css”,而有些则需要“stylesheet/css”类型

  25. 25

    为什么有些算术指令有有符号/无符号变体,而有些则没有

  26. 26

    为什么有些 C API 不遵循封装

  27. 27

    为什么有些UWP项目有project.json而有些却没有?

  28. 28

    为什么有些对象没有在这个 .splice() 中被移除而有些是?

  29. 29

    为什么有些电子邮件ID被接受而有些却没有PHP

热门标签

归档