[英]Internal Server Error 500 when using Web Api Http Put
我正在為使用Picking Process的公司開發一個Webapp。
這個過程非常簡單,我有一個帶有一些信息的銷售訂單,我創建了一個包含一些信息的揀配清單(例如:項目數,總重量和銷售訂單ID)。
我總是得到這個錯誤
內部服務器錯誤
...當我嘗試使用PUT方法時,創建一個Picking List並將其添加到Web Api端的數據庫中。
當我刪除[HttpPost]
,錯誤更改為:
找不到方法
要么
方法不允許
這是我的代碼:
客戶端
public async Task<bool> AddTarefa(ListasPicking listaPickingAdd)
{
String listaparaAdicionar = listaPickingAdd.idLista + ";" + listaPickingAdd.IDordemVenda + ";" + listaPickingAdd.peso + ";" + listaPickingAdd.itens;
HttpResponseMessage response = await cliente.PutAsJsonAsync("api/ListasPicking/", listaparaAdicionar);
return response.IsSuccessStatusCode;
}
Web Api Side - 控制器
//PUT: api/ListasPicking
[ResponseType(typeof (ListasPicking))]
[HttpPut]
public IHttpActionResult PutLista ([FromBody] String lista)
{
if(!ModelState.IsValid)
{
return BadRequest(ModelState);
}
String[] result = lista.Split(';');
ListasPicking novaLista = new ListasPicking();
novaLista.idLista=result[0];
novaLista.IDordemVenda = result[1];
string lista_peso_converttoDouble = result[2];
novaLista.peso = Convert.ToDouble(lista_peso_converttoDouble);
string lista_items_converttoInt = result[3];
novaLista.itens = Convert.ToInt32(lista_items_converttoInt);
primContext.ListasPickingGet.Add(novaLista);
primContext.SaveChanges();
return StatusCode(HttpStatusCode.Created);
}
我嘗試了一些與此類問題相關的解決方案,以及相同的錯誤。
Web.config文件
<?xml version="1.0" encoding="utf-8"?>
<!--
For more information on how to configure your ASP.NET application, please visit
https://go.microsoft.com/fwlink/?LinkId=301879
-->
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="PrimaveraRest.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5.2" />
<httpRuntime targetFramework="4.5.2" />
<httpModules>
<add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" />
</httpModules>
</system.web>
<system.webServer>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<!-- <remove name="WebDAV"/> -->
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
<validation validateIntegratedModeConfiguration="false" />
<modules>
<!-- <remove name="WebDAVModule"/> -->
<remove name="ApplicationInsightsWebTracking" />
<add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" preCondition="managedHandler" />
</modules>
</system.webServer>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="1.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
<applicationSettings>
<PrimaveraRest.Properties.Settings>
<setting name="Company" serializeAs="String">
<value>DEMO</value>
</setting>
<setting name="User" serializeAs="String">
<value>adminfixe</value>
</setting>
<setting name="Password" serializeAs="String">
<value>123456</value>
</setting>
</PrimaveraRest.Properties.Settings>
</applicationSettings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
</configuration>
UPDATE
當我重建我的解決方案時,我得到一些像這樣的行:
Files \\ Microsoft Visual Studio \\ 2017 \\ Community \\ MSBuild \\ 15.0 \\ Bin \\ Microsoft.Common.CurrentVersion.targets(1964,5):警告MSB3270:正在構建的項目的處理器體系結構“MSIL”與之間存在不匹配處理器體系結構的參考“Interop.ICrmDS800”,“x86”。 這種不匹配可能會導致運行時故障。 請考慮通過Configuration Manager更改項目的目標處理器體系結構,以便在項目和引用之間調整處理器體系結構,或者依賴於具有與項目的目標處理器體系結構相匹配的處理器體系結構的引用
可能是問題? Interop.dll是我在項目中包含的文件,用於使用外部程序獲取有關銷售訂單的信息。
解
在“ListaPicking”模型中缺少[Key]注釋,我正在傳遞一個帶有默認值的DateTime變量...我只是改為例如DateTime.Today,現在它正在工作:)
您調用PutAsJsonAsync
但是當它需要一個表示json的字符串時,您將傳遞非json字符串作為您的數據參數。
從文檔:
將PUT請求作為異步操作發送到指定的Uri,並將給定值序列化為JSON。
為了使其工作,請調用PutAsync
。
你可以發送整個模型
public async Task<bool> AddTarefa(ListasPicking listaPickingAdd) {
var response = await cliente.PutAsJsonAsync("api/ListasPicking/", listaPickingAdd);
return response.IsSuccessStatusCode;
}
並以同樣的方式接受它,而不是解構和重構它。
[ResponseType(typeof (ListasPicking))]
[HttpPut]
public IHttpActionResult PutLista ([FromBody] ListasPicking novaLista) {
if(!ModelState.IsValid) {
return BadRequest(ModelState);
}
primContext.ListasPickingGet.Add(novaLista);
primContext.SaveChanges();
return StatusCode(HttpStatusCode.Created);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.