【问题标题】:Post from HTML to a separate .NET Core Application从 HTML 发布到单独的 .NET Core 应用程序
【发布时间】:2018-07-27 03:31:18
【问题描述】:

我们按照本教程 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 窗体站点创建了新项目。 我用这个 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 man 可以 POST 到它,但是 web 表单不能

【问题讨论】:

  • 不要将网络表单混入其中 - 它与网络表单后端的互操作密切相关。
  • 我们希望 .NET Core 作为后端 API,而 HTML 表单作为前端。你有什么推荐的?
  • 只使用直接的 html - 没有 runat 废话。

标签: c#


【解决方案1】:

选择合适的客户端技术

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

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

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

(提示用 JS 调用你的 rest 服务非常简单。参见这里的例子: How to call a REST web service API from JavaScript?)

【讨论】:

  • 查看更新:简单表单调用 api(这不起作用)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-08
  • 2021-11-06
  • 2021-02-03
  • 2017-02-26
  • 1970-01-01
相关资源
最近更新 更多