2017-09-03 203 views
0

我有一个网站,显示-Default.aspx,现在我加了的WebAPI CONTROLER类项目。该页面,我怎样才能得到它运行,也就是说,如果我只是创建一个Post请求与我的URL不起作用。下面是我的webapi控制器类,我如何将它集成到我当前的网站 - 所以我可以发布请求并获取返回字符串。怎样的WebAPI添加到ASPX页面

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) 
    { 
    } 
} 

如果我做一个POST请求“www.xyz.in”我得到整个网页在我的收益流,而不是,我在我的帖子以上功能返回字符串“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(); 

下面是得到了添加到我的web.config(由Visual Studio)文件,当我加入的WebAPI类,我的项目内容。

<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> 

+0

你串回来在Ajax请求的数据..请确保你包括你正在做的岗位价值,也可能不会映射propertly –

+0

一个基本的疑问,以确认是否是正确地做事,在客户端应用程序要打发POST请求我的默认网址我网站,我应该使用/ api/Valcontrol来执行Post事件吗? – user1066231

+0

是的,你很可能做出正确的发布请求,你只是没有你的控制器appropiately命名 –

回答

0

这泔水不行Valcontrol不是控制器的有效名称。控制器需要有后缀控制器才能正确映射。

所以,你需要将名称更改为ValController,或ValControlController。

[Route("api/[controller]")] 
public class ValController : 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) 
    { 
    } 
} 

然后进行POST请求,像这样:

POST api/val?value=Test 

,改变你的标题到内容类型:应用程序/ JSON

+0

我改了名字,还是力的工作。 – user1066231

+0

更改内容类型,以及尝试使用我上面 –

+0

1提供的类)在我的客户端应用程序,我必须改变 - conn.setRequestProperty(“内容类型”,“应用程序/应用/ JSON”); - 完成,2)更新类名 - 完成,3)我注意到你已经添加了[Route(“api/[controller]”)] - 如果我添加了这个,Visual Studio显示错误。“类型或命名空间Route不被发现。“ 4)Dint理解“POST api/val?value = Test”语句 - 好心解释.. – user1066231