Я разрабатываю intr anet API для использования с сайтом REACT. GET работает нормально, и теперь я пытаюсь разработать сообщение, но я продолжаю получать сообщение «Запрашиваемый ресурс не поддерживает http-метод« PUT »». от почтальона. Я просмотрел множество сайтов и страниц по этому вопросу и перепробовал все, что смог найти, вплоть до поиска файлов Machine.config и Web.config по умолчанию. Я удалил все ссылки на WebDav и добавил глагол во все сегменты системы, которые я могу найти.
Я использую IIS 7.5 на Windows 7 с VS2019 и. Net 4.7.2.
Вот мой web.config:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
</customHeaders>
</httpProtocol>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<remove name="WebDAVModule" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET, POST, PUT, DELETE, DEBUG, OPTIONS" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
и мой контроллер:
// PUT api/<controller>/5
[System.Web.Http.HttpPut]
[Route("MyEndPoint")]
public void Put(int id, [FromBody]object val)
{
//tried also passing in JObject value as a parameter
var value = new JObject(val);
var CaseNum = value["CaseNum"].ToString();
var LastName = value["LastName"].ToString();
var FirstName = value["FirstName"].ToString();
var MiddleInitial = value["MiddleInitial"].ToString();
var FinNum = value["FinNum"].ToString();
var TransitNum = value["TransitNum"].ToString();
var AccountNum = value["AccountNum"].ToString();
//... more code here once I can hit the function
и, наконец, моя начальная конфигурация для маршрутизации:
public class Startup
{
public void Configuration(IAppBuilder app)
{
var config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "dataAPI/{controller}/{function}",
defaults: new { function = RouteParameter.Optional }
);
config.Formatters.Remove(config.Formatters.XmlFormatter);
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
config.Formatters.JsonFormatter.SerializerSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc;
app.UseWebApi(config);
}
}
}
******************************РЕДАКТИРОВАТЬ******************* ************ Добавление в код React выполнения вызова пут
export const SomeMethod_Update = (rowId, rowData) => (dispatch) => {
dispatch(Actions.SomeMethodLoading());
//var data={row: rowId, data: rowData};
fetchInit.method = "PUT";
fetchInit.body = JSON.stringify(rowData);
var myReq = new Request('/dataAPI/SomeMethod/' + rowId, fetchInit);
return fetch(myReq)
.then(response => {
if (response.ok) {
return response;
}
else {
var error = new Error("Error " + response.statusText);
error.response = response;
throw error;
}
}, error => {
var err = new Error(error.message);
throw err;
})
.then(response => response.json())
.then(SomeMethod => {
if (SomeMethod !== "false")
dispatch(Actions.SomeMethodLoaded(SomeMethod))
else
CurrentPage_Update({ componentId: 'NotAllowed' });
})
.catch((err) => dispatch(Actions.SomeMethodFailed(err.message)));
}
Первоначально я не вставлял это, потому что получал ту же проблему от Почтальона. Вот пример JSON, который я отправляю на случай, если это поможет:
[
{
"id": 226,
"Case Number": 172524,
"Last Name": "lastName",
"First Name": "firstName",
"Initials": "",
"Bank #": "000 ",
"Transit #": "12345 ",
"Account #": "111111111 "
}
]