У меня есть код в моем контроллере:
[Route("api/deliveryitems/InsertIntoPPTData/{stringifiedRecord}")]
... и я называю это через Postman следующим образом:
http://localhost:21609/api/deliveryitems/InsertIntoPPTData?
stringifiedRecord=serNum77;tx2;siteNum2;bla2.xml;ppt_user2;tx_memo2;file_beg2;file_end2
... но получим:
{
Message: "No HTTP resource was found that matches the request URI
'http://localhost:21609/api/deliveryitems/InsertIntoPPTData? stringifiedRecord=serNum77;tx2;siteNum2;bla2.xml;ppt_user2;tx_memo2;file_beg2;file_end2'."
MessageDetail: "No type was found that matches the controller named 'deliveryitems'."
}
Другие методы REST, которые создаются и вызывается таким же образом, найдены просто отлично - почему бы и нет? Единственное, что не имеет общего с другими, это то, что это HttpPost, тогда как другие HttpGet. Значит ли это, что большая разница? Я выбираю "Post" из раскрывающегося списка Postman при попытке вызвать этот метод REST.
UPDATE
Да, это, по-видимому, не имеет никакого отношения к тому, что это сообщение и передача аргументов в URI, потому что теперь я получаю то же самое с помощью метода HttpGet:
{
Message: "No HTTP resource was found that matches the request URI
'http://localhost:21609/api/department/getndeptsfromid?firstId=2&countToFetch=12'."
MessageDetail: "No action was found on the controller 'Department' that matches the request."
}
Я называю это от почтальона следующим образом:
http://localhost:21609/api/department/getndeptsfromid?firstId=2&countToFetch=12
... и он действительно появляется в моем контроллере:
[HttpGet]
[Route("api/department/getndeptsfromid/{firstId}/{countToFetch}")]
public List<Department> GetNDepartmentsFromID(int FirstId, int CountToFetch)
{
return CCRService.GetNDepartmentsFromID(FirstId, CountToFetch);
}
ОБНОВЛЕНИЕ 2
Я думал, что собираюсь решить эту проблему, когда я изменил этот код:
String.Format("api/department/getndeptsfromid/{0}/{1}", FirstId, CountToFetch)
... к этому:
String.Format("api/department/getndeptsfromid?firstId={0}&countToFetch={1}", FirstId, CountToFetch)
... но я все равно получаю то же самое err msg...
ОБНОВЛЕНИЕ 3
Я считаю, что это также не работает:
http://localhost:21609/api/delivery/invnumbyid?ID=33
... и поэтому существует определенная картина. EVERY REST API-вызов, который я делаю, который содержит args/params, терпит неудачу таким же образом; все остальные (http://localhost:21609/api/deliveries/Count, http://localhost:21609/api/deliveryitems/count, http://localhost:21609/api/department/getall
) работают нормально. IOW, если в URI нет аргументов, метод обнаружен. Если есть аргументы, это не так.
Таким образом, очевидно, что что-то не так с тем, как я передаю args/vals в URI (добавляя "? =" в случае одного аргумента и, в случае двух аргументов "? = & =" ) и/или что-то не так с тем, как я настроил маршрутизацию. В частности, этот стиль работает:
[Route("api/Deliveries/Count")]
... тогда как этого стиля нет:
[Route("api/delivery/invnumbyid/{ID}")]
Я постараюсь ответить на этот вопрос КАК МОЖНО СКОРЕЕ - 50 баллов для этого участника Gordiesque, и 100, если он ответил сегодня (до настройки щедрости).
ОБНОВЛЕНИЕ 4
Я изменил маршрутизацию, чтобы включить тип данных arg, чтобы это:
[Route("api/delivery/invnumbyid/{ID}")]
-это это:
[Route("api/delivery/invnumbyid/{ID:int}")]"
Но это все еще не получилось, рычание:
{
Message: "No HTTP resource was found that matches the request URI
'http://localhost:21609/api/delivery/invnumbyid?ID=45'."
MessageDetail: "No action was found on the controller 'Delivery' that matches the request."
}
Затем "на жаворонке" я попытался ввести это в Postman:
http://localhost:21609/api/delivery/invnumbyid/45
... и это сработало! (Я думал, что это должно быть "http://localhost:21609/api/delivery/invnumbyid?ID=45
" )
Но аналогичная попытка в Postman:
http://localhost:21609/api/department/getndeptsfromid/2/12/
... продолжает сбой: "Нет значения для одного или нескольких требуемых параметров". хотя это и попало:
[HttpGet]
[Route("api/department/getndeptsfromid/{firstId}/{countToFetch}")]
public List<Department> GetNDepartmentsFromID(int FirstId, int CountToFetch)
{
return HHSService.GetNDepartmentsFromID(FirstId, CountToFetch);
}
... и аргументы GetNDepartmentsFromID() имеют ожидаемые vals (2 и 12)
Еще хуже /weerder - результат, который я получил с помощью < http://localhost:21609/api/deliveryitems/InsertIntoPPTData/serNum77;tx2;siteNum2;bla2.xml;ppt_user2;tx_memo2;file_beg2;file_end2
":
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>IIS 8.0 Detailed Error - 404.0 - Not Found</title>
<style type="text/css">
<!--
body{margin:0;font-size:.7em;font-family:Verdana,Arial,Helvetica,sans-serif;}
code{margin:0;color:#006600;font-size:1.1em;font-weight:bold;}
.config_source code{font-size:.8em;color:#000000;}
pre{margin:0;font-size:1.4em;word-wrap:break-word;}
ul,ol{margin:10px 0 10px 5px;}
ul.first,ol.first{margin-top:5px;}
fieldset{padding:0 15px 10px 15px;word-break:break-all;}
.summary-container fieldset{padding-bottom:5px;margin-top:4px;}
legend.no-expand-all{padding:2px 15px 4px 10px;margin:0 0 0 -12px;}
legend{color:#333333;;margin:4px 0 8px -12px;_margin-top:0px;
font-weight:bold;font-size:1em;}
a:link,a:visited{color:#007EFF;font-weight:bold;}
a:hover{text-decoration:none;}
h1{font-size:2.4em;margin:0;color:#FFF;}
h2{font-size:1.7em;margin:0;color:#CC0000;}
h3{font-size:1.4em;margin:10px 0 0 0;color:#CC0000;}
h4{font-size:1.2em;margin:10px 0 5px 0;
}#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:"trebuchet MS",Verdana,sans-serif;
color:#FFF;background-color:#5C87B2;
}#content{margin:0 0 0 2%;position:relative;}
.summary-container,.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;}
.content-container p{margin:0 0 10px 0;
}#details-left{width:35%;float:left;margin-right:2%;
}#details-right{width:63%;float:left;overflow:hidden;
}#server_version{width:96%;_height:1px;min-height:1px;margin:0 0 5px 0;padding:11px 2% 8px 2%;color:#FFFFFF;
background-color:#5A7FA5;border-bottom:1px solid #C1CFDD;border-top:1px solid #4A6C8E;font-weight:normal;
font-size:1em;color:#FFF;text-align:right;
}#server_version p{margin:5px 0;}
table{margin:4px 0 4px 0;width:100%;border:none;}
td,th{vertical-align:top;padding:3px 0;text-align:left;font-weight:normal;border:none;}
th{width:30%;text-align:right;padding-right:2%;font-weight:bold;}
thead th{background-color:#ebebeb;width:25%;
}#details-right th{width:20%;}
table tr.alt td,table tr.alt th{}
.highlight-code{color:#CC0000;font-weight:bold;font-style:italic;}
.clear{clear:both;}
.preferred{padding:0 5px 2px 5px;font-weight:normal;background:#006633;color:#FFF;font-size:.8em;}
-->
</style>
</head>
<body>
<div id="content">
<div class="content-container">
<h3>HTTP Error 404.0 - Not Found</h3>
<h4>The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.</h4>
</div>
<div class="content-container">
<fieldset>
<h4>Most likely causes:</h4>
<ul>
<li>The directory or file specified does not exist on the Web server.</li>
<li>The URL contains a typographical error.</li>
<li>A custom filter or module, such as URLScan, restricts access to the file.</li>
</ul>
</fieldset>
</div>
<div class="content-container">
<fieldset>
<h4>Things you can try:</h4>
<ul>
<li>Create the content on the Web server.</li>
<li>Review the browser URL.</li>
<li>Check the failed request tracing log and see which module is calling SetStatus. For more information, click
<a href="#" onclick="location.href='http://go.microsoft.com/fwlink/?LinkID=66439'; return false;">here</a>.
</li>
</ul>
</fieldset>
</div>
<div class="content-container">
<fieldset>
<h4>Detailed Error Information:</h4>
<div id="details-left">
<table border="0" cellpadding="0" cellspacing="0">
<tr class="alt">
<th>Module</th>
<td> IIS Web Core</td>
</tr>
<tr>
<th>Notification</th>
<td> MapRequestHandler</td>
</tr>
<tr class="alt">
<th>Handler</th>
<td> StaticFile</td>
</tr>
<tr>
<th>Error Code</th>
<td> 0x80070002</td>
</tr>
</table>
</div>
<div id="details-right">
<table border="0" cellpadding="0" cellspacing="0">
<tr class="alt">
<th>Requested URL</th>
<td> http://localhost:21609/api/deliveryitems/InsertIntoPPTData/serNum77;tx2;siteNum2;bla2.xml;ppt_user2;tx_memo2;file_beg2;file_end2</td>
</tr>
<tr>
<th>Physical Path</th>
<td> C:\project\git\CStore\HHS.API\api\deliveryitems\InsertIntoPPTData\serNum77;tx2;siteNum2;bla2.xml;ppt_user2;tx_memo2;file_beg2;file_end2</td>
</tr>
<tr class="alt">
<th>Logon Method</th>
<td> Anonymous</td>
</tr>
<tr>
<th>Logon User</th>
<td> Anonymous</td>
</tr>
<tr class="alt">
<th>Request Tracing Directory</th>
<td> C:\Users\clay\Documents\IISExpress\TraceLogFiles\HHS.API</td>
</tr>
</table>
<div class="clear"></div>
</div>
</fieldset>
</div>
<div class="content-container">
<fieldset>
<h4>More Information:</h4>
This error means that the file or directory does not exist on the server. Create the file or directory and try the request again.
<p>
<a href="#" onclick="location.href='http://go.microsoft.com/fwlink/?LinkID=62293&IIS70Error=404,0,0x80070002,7601'; return false;">View more information »</a>
</p>
</fieldset>
</div>
</div>
</body>
</html>
¡Que demonios!
Я печально улыбаюсь, помню, что за шорошом занавесом (где Робинсон Джефферс и Эдгар Аллен По есть, по-видимому, борьба) есть еще одна горгулья. Нехорошо покоряясь...
ОБНОВЛЕНИЕ 5
Хорошо, здесь сказано иначе:
От почтальона, если я использую этот URL-адрес:
http://localhost:21609/api/department/getndeptsfromid/2/12/
Я использую этот метод:
[HttpGet]
[Route("api/department/getndeptsfromid/{firstId}/{countToFetch}")]
public List<Department> GetNDepartmentsFromID(int FirstId, int CountToFetch)
{
return HHSService.GetNDepartmentsFromID(FirstId, CountToFetch);
}
... где значение FirstId равно 2, а значение CountToFetch равно 12 (как я ожидал бы от них). Но затем Postman отправляет обратно мой пакет с обозначением " 500 Нет значения для одного или нескольких требуемых параметров."
¡Que demonios! Оба параметра были явно пройдены!
Если я использую URI, который выглядит более корректным:
http://localhost:21609/api/department/getndeptsfromid?firstId=2&countToFetch=12
Я получаю:
{
Message: "No HTTP resource was found that matches the request URI
'http://localhost:21609/api/department/getndeptsfromid?firstId=2&countToFetch=12'."
MessageDetail: "No action was found on the controller 'Department' that matches the request."
}
Но это маршрут, который я предоставил:
[Route("api/department/getndeptsfromid/{firstId}/{countToFetch}")]
... и поэтому я бы сказал, что на самом деле я сделал соответствующее действие над контроллером. И, BTW, если я просто введите это как URI в Postman:
http://localhost:21609/api/department/getndeptsfromid
... и затем используйте интерфейс Postman "URL Parameter Key/Value", чтобы добавить их, он генерирует тот же самый URL, что и выше, как можно увидеть здесь:
... и с тем же результатом.
Я могу только сказать это снова (простить мой "Las Uvas de la Ira" - испанский испанский): ¡Que demonios!