将数据从网页表单发送到自托管 api

Send data from web page form to a self hosted api

我有一个自托管 API,还有一个简单的 html 站点,我想从中提交表单数据到自托管 API。我目前正在本地主机上测试 webapi,该站点也通过 IIS 托管在本地主机上。我不确定我需要在 html 或 C# 代码中更改什么才能完成这项工作。这是我所拥有的基础知识:

public class TestController : ApiController
{
    public TestController() {}

    [HttpGet]
    public IHttpActionResult() 
    {
        //do stuff
        return OK();
    }

    [HttpPost]
    //POST localhost:9400/api/Test
    public IHttpActionResult Post([FromBody]FormDatacollection name) 
    {
        //do stuff
        return OK();
    }
}

这里是一个非常简单的 html 站点:

<html>
    <head>
        <title>
            My Test Page
        </title>
    </head>
    <body>
        <form action="localhost:9400/api/test" method="post">
            <input type="text" name="name"><br>
        </form>
    </body>
</html>

基本上,我希望将网站文本框中的文本通过 post 发送到自托管 api。我用现有的尝试了它,但它从未到达 post,并且看起来好像请求从未从浏览器发出过。但是,如果我在浏览器中手动输入 localhost:9400/api/Test,就会到达 Get,并且我会收到 OK 响应。

我只有 web 的基本配置 api。

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

        appBuilder.UseWebApi(config);
}

我想做的事可行吗?如果可行,我该怎么做?

如果不进行一些更改,它将无法工作,您的其余 api 期待数据以 json 的形式发送。首先,我强烈建议您获取 Fiddler 的副本,然后您将确切地看到来自您的站点以及从您的服务返回的内容。您可能会发现无法在服务中进行调试,因为服务接收的内容与控制器中的任何签名都不匹配,因此框架本身正在处理无效请求。该框架将根据 http 动词和方法参数将请求与方法匹配。

在让它工作方面,搜索发送 HTML 表单数据到休息 API,在这个网站和其他地方有很多结果。