首页 > 解决方案 > 从 HTML 发布到单独的 .NET Core 应用程序

问题描述

我们按照本教程https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api?view=aspnetcore-2.1使用 ASP.NET Core 和 Visual Studio for Windows 创建 Web API 和创建了一个 ToDoApi 项目。我可以通过项目和 PostMan 发布并获取 URL:http://localhost:2399/api/todo

然后,我使用 ASP.NET Web Forms Site 创建了新项目。我用这个 html 添加了新的 Web 表单:

<body>
    <form id="form1" runat="server" method="post" action="http://localhost:2399/api/Create">
        <div>
            <asp:Label  Text="Name:" runat="server" />
            <asp:TextBox runat="server" name="name"/>
            <br />
            <asp:Button Text="Submit" runat="server"  />
        </div>
    </form>
</body>

我试图发布到以前的项目,但没有成功。我可以打第一个断点,但不能打第二个。我们希望 .NET Core 作为后端 API,而 HTML 表单作为前端。你有什么建议吗?

在此处输入图像描述

  public class TodoController : Controller
    {
        private readonly TodoContext _context;

        public TodoController(TodoContext context)
        {
            _context = context;

            if (_context.TodoItems.Count() == 0)
            {
                _context.TodoItems.Add(new TodoItem { Name = "Item1" });
                _context.SaveChanges();
            }
        }

        [Route("~/api/Create")]
        [HttpPost]
        public IActionResult Create([FromBody] TodoItem item)
        {
            if (item == null)
            {
                return BadRequest();
            }

            _context.TodoItems.Add(item);
            _context.SaveChanges();

            return CreatedAtRoute("GetTodo", new { id = item.Id }, item);
        }

简单的表单调用 api(这不起作用):

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>MY API</title>
</head>
<body>
    <h1>ADD NEW LEAD</h1>
        <input type="text" id="add-name" placeholder="Full Name">
        <input type="text" id="add-company" placeholder="Company">
        <input type="text" id="add-phone" placeholder="Phone">
        <input type="text" id="add-email" placeholder="Email">
        <input type="text" id="add-address" placeholder="Address">
        <input type="text" id="add-city" placeholder="City">
        <input type="text" id="add-state" placeholder="State">
        <input type="text" id="add-zip" placeholder="Zip Code">
        <input type="text" id="add-description" placeholder="Description">

        <button type="submit" onclick="javascript:send()">Submit</button>


    <div id='div'>

    </div>

    <script type="text/javascript" language="javascript">

        function send() {
            //var ItemJSON = {
            //    "FullName": $('#add-name').val(),
            //    "Company": $('#add-company').val(),
            //    "Phone": $('#add-phone').val(),
            //    "Email": $('#add-email').val(),
            //    "Address": $('#add-address').val(),
            //    "City": $('#add-city').val(),
            //    "State": $('#add-state').val(),
            //    "Zip": $('#add-zip').val(),
            //    "Description": $('#add-description').val()
            //};
            var ItemJSON = '{    "FullName": "NA", "Phone": "31439289452", "Ext": "5000",  "Email": "m.alkurwi@Yahoo.com","Company": "PlazSoft", "Address": "357 Hinder dr",  "Description": "tsetteststeste",   "City": "STL",    "State": "MO",  "Zipcode": "63125"  }';
            alert('1')
            URL = "http://localhost:59930/api/values";  //Your URL

            var xmlhttp = new XMLHttpRequest();
            xmlhttp.onreadystatechange = function () {
                if (this.readyState == 4 && this.status == 200) {
                    alert(this.responseText);
                }
            };
            alert('2')
            xmlhttp.open("POST", URL, true);//tried both false and true
            xmlhttp.setRequestHeader("Content-Type", "application/json");
            xmlhttp.send(JSON.stringify(ItemJSON));
            document.getElementById("div").innerHTML = xmlhttp.statusText + ":" + xmlhttp.status + "<BR><textarea rows='100' cols='100'>" + xmlhttp.responseText + "</textarea>";
        }

    </script>
</body>
</html>

邮递员可以 POST 到它,但网络表单不能

标签: c#

解决方案


选择正确的客户端技术

根据您的问题级别,我建议您从带有一些 js的纯 html 网站(从这里学习:https ://www.w3schools.com/html/default.asp)开始。也许也可以使用 jquery ( http://jquery.com/ ),它让你的第一步更轻松。这样,您将学习基础知识。

https://www.w3schools.com/jquery/ajax_post.asp

我个人认为这是您应该了解的基本知识。之后,您可以向前迈出一步并学习例如角度。

(提示使用 JS 调用您的 REST 服务非常简单。请参见此处的示例: 如何从 JavaScript 调用 REST Web 服务 API?


推荐阅读