【发布时间】:2017-09-03 16:37:09
【问题描述】:
我有一个显示页面 -Default.aspx 的网站,现在我在项目中添加了一个 webapi 控制器类。我怎样才能让它运行。即,如果我只是用我的 URL 创建一个 Post 请求,它是不工作。下面是我的 webapi 控制器类,如何将它集成到我当前的网站中 - 这样我就可以发布请求并获取返回字符串。
public class Valcontrol : ApiController
{
// GET api/<controller>
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/<controller>/5
public string Get(int id)
{
return "value";
}
// POST api/<controller>
public String Post([FromBody]string value)
{
return "Test";
}
// PUT api/<controller>/5
public void Put(int id, [FromBody]string value)
{
}
// DELETE api/<controller>/5
public void Delete(int id)
{
}
}
如果我向“www.xyz.in”发出 Post 请求,我会在我的返回流中获取整个网页,而不是我在上面的 Post 函数中返回的字符串“Test”。
我的应用程序中的客户端调用 - Java 代码:
URL url = new URL("http://www.xyz.in/");
// get the payuConfig first
String postParam = "Dev";
byte[] postParamsByte = postParam.getBytes("UTF-8");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length", String.valueOf(postParamsByte.length));
conn.setDoOutput(true);
conn.getOutputStream().write(postParamsByte);
InputStream responseInputStream = conn.getInputStream();
StringBuffer responseStringBuffer = new StringBuffer();
byte[] byteContainer = new byte[1024];
for (int i; (i = responseInputStream.read(byteContainer)) != -1; ) {
responseStringBuffer.append(new String(byteContainer, 0, i));
}
String strResponse = responseStringBuffer.toString();
以下是当我将 webapi 类添加到我的项目时添加到我的 web.config(由 Visual Studio)文件中的内容。
<system.webServer>
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit"/>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit"/>
<remove name="ExtensionlessUrlHandler-Integrated-4.0"/>
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0"/>
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0"/>
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/>
</handlers>
【问题讨论】:
-
您的字符串返回到 ajax 请求的数据中...确保您在发布的帖子中包含该值,否则它可能无法正确映射
-
一个基本疑问,确认是否做对了。在客户端应用程序中,我正在向我网站的默认 URL 发送 Post 请求,我应该使用 /api/Valcontrol 来执行 Post 事件吗?
-
是的,您可能正确地发出了发布请求,只是您的控制器没有正确命名
-
显示带有正文消息的客户端调用
-
@MarcusH 更新了上面的问题..
标签: c# asp.net asp.net-web-api asp.net-web-api-routing