Как добавить webapi на веб-страницу aspx

У меня есть веб-сайт, на котором отображается страница -Default.aspx. Теперь я добавил в проект класс контроллера webapi. Как я могу его запустить. То есть, если я просто создаю запрос Post с моим URL, он не работает. ниже приведен мой класс контроллера 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)
    {
    }
}

Если я делаю запрос Post на "www.xyz.in", я получаю всю веб-страницу в обратном потоке вместо строки "Test", которую я возвращаю в моей функции Post выше.

Вызов клиента в моем приложении - код 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(визуальной студией), когда я добавил класс 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>

1 ответ

Это помехи не работают 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  api/val?value=Test

и измените заголовки на Content-Type:application/json

Другие вопросы по тегам