Asp.net web api 404未在HttpClient中找到

Asp.net web api 404未在HttpClient中找到,asp.net-web-api,dotnet-httpclient,Asp.net Web Api,Dotnet Httpclient,我正在使用HttpClient类(来自命名空间System.Net.Http)将数据发布到Windows窗体应用程序中的asp.Net Web API操作。我的问题是我一直收到状态代码404未找到(端点未找到)。我错过什么了吗?请帮忙。先谢谢你 以下是我的C#代码,它使用HttpClient向XML Web API发出POST请求: private async Task PostCustomForm() { using (var client = new

我正在使用HttpClient类(来自命名空间System.Net.Http)将数据发布到Windows窗体应用程序中的asp.Net Web API操作。我的问题是我一直收到状态代码404未找到(端点未找到)。我错过什么了吗?请帮忙。先谢谢你

以下是我的C#代码,它使用HttpClient向XML Web API发出POST请求:

private async Task PostCustomForm()
        {

            using (var client = new System.Net.Http.HttpClient())
            {
                NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();

                try
                {
                    CustomFormLog customFormLog = new CustomFormLog();
                    customFormLog.DeviceId = 1234;
                    customFormLog.UserExperienceId = 33442036854775807;
                    customFormLog.NetworkItemId = 58595555;


                    client.BaseAddress = new Uri("http://xyzwebserver/");
                    client.DefaultRequestHeaders.Accept.Clear();
                    client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/xml"));

                    HttpResponseMessage response = await client.PostAsXmlAsync<CustomFormLog>("logdata/customform/1234", customFormLog); 



                    if (response.IsSuccessStatusCode)
                    {
                        logger.Info(response.IsSuccessStatusCode);

                    }
                    else
                    {
                        logger.Info(response);

                    }
                }
                catch (HttpRequestException ex)
                {
                    logger.Error(ex.Message + " - " + ex.InnerException.Message);
                    MessageBox.Show(ex.Message + " - " + ex.InnerException.Message);
                }
            }
        }

检查route.config文件,您可能没有指向控制器。我不能确定它应该是什么,因为您还没有发布配置文件。如果使用默认的web API模板,需要注意的是,将有两个路由配置文件,一个用于API控制器,另一个用于基本控制器。我猜您的控制器的路由中有默认的/api/。在这种情况下,解决问题的方法是

HttpResponseMessage response = await client.PostAsXmlAsync<CustomFormLog>("api/logdata/customform/1234", customFormLog);
httpresponsemessageresponse=wait client.PostAsXmlAsync(“api/logdata/customform/1234”,customFormLog);

好的,从帮助信息中可以看出,导出的URL是

Url: http://xyzwebserver/logdata/customform?device={DEVICEID}
但是你要发送的是

Url: http://xyzwebserver/logdata/customform/1234
只有在web api路由配置在其路由配置中定义了{device}之后,才会出现正确的URL。我建议使用他们提到的url格式,并将请求行更改为

HttpResponseMessage response = 
await client.PostAsXmlAsync<CustomFormLog>("logdata/customform?device=1234", customFormLog); 
HttpResponseMessage响应=
等待client.PostAsXmlAsync(“logdata/customform?device=1234”,customFormLog);

你的控制器和路线配置看起来怎么样like@Guanxi不幸的是,我并不拥有那个web API。我只是基于那个web API提供商网站上的帮助文本。请参阅我的文章,以获取我获得的此类帮助Web API文本。不幸的是,我不拥有该Web API。我只是基于那个web API提供商网站上的帮助文本。请参阅我的帖子,以获取我获得的此类帮助Web API文本。从该web API站点的帮助文本中,我需要传递请求URL查询字符串中的deviceId参数和请求XML正文中的XML对象。感谢您的回复。我听从你的建议。错误“404NotFound”消失了。但是,我遇到了另一个错误,比如--StatusCode:400,ReasonPhrase:'Bad Request',Version:1.1,Content:System.Net.Http.StreamContent,Headers:{Cache Control:private Date:Wed,2014年9月10日20:56:35 GMT服务器:Microsoft IIS/7.5 X-AspNet-Version:4.0.30319 X-Powered-By:ASP.Net内容长度:1758内容类型:text/html}这是特定于请求的错误,他们可能有某种验证失败,这就是为什么您会出现该错误。我能从帮助文本中做出的唯一猜测是CustomFormLog类中不需要DeviceID。试一试,但除此之外,我认为我不能在不了解服务的情况下提出任何建议。谢谢你的回复。我从DTO类CustomFormLog中删除了属性“DeviceId”,但状态码400 BadRequest仍然存在。我猜,WEB API服务操作会验证DeviceId参数。无论如何,谢谢你的帮助。顺便问一下,你知道什么样的在线资源/文章/博客,这样我就可以通过阅读了解更多关于Web API站点帮助文本的含义和规则了吗?我还没有看过任何内容:(你可以尝试asp.net站点。你可以将其标记为已回答(因为它解决了原始问题)
Url: http://xyzwebserver/logdata/customform/1234
HttpResponseMessage response = 
await client.PostAsXmlAsync<CustomFormLog>("logdata/customform?device=1234", customFormLog);