2017-05-25 62 views
1

我开发web应用程序到使用过程挑选公司时。内部服务器错误500使用网络API HTTP PUT

的过程很简单,我有一个销售订单的一些信息,和我的一些信息创建采摘列表(例如:物品,总重量和销售订单ID的数量)。

我得到总是这个错误

内部服务器错误

...当我试图用PUT方法,创建一个领料单,并将其添加到数据库中在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; 
} 

网络API边 - 控制器

//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=\&quot;Web\&quot; /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

当我重建我的解决方案,我得到一些线路是这样的:

文件\微软的Visual Studio的 \ 2017年\社区\的MSBuild \ 15.0 \斌\ Microsoft.Common.CurrentVersion.targets(1964,5): 警告MSB3270:有项目的处理器架构 正在建造“MSIL”,并且参考“Interop.ICrmDS800”,“86”的处理器架构 之间的不匹配。这 不匹配可能会导致运行时故障。请考虑通过 配置管理器更改项目的 针对性的处理器架构,以便使其项目和引用之间的处理器架构 ,或采取与有针对性的 处理器架构相匹配的处理器架构 引用的依赖你项目

可能是什么问题?互操作。dll是一个包含在我的项目中的文件,它使用外部程序获取有关销售订单的信息。

SOLUTION

[键]注释中缺少“ListaPicking”的模式,和我经过一个DateTime变量的默认值...我只是改变例如DateTime.Today,现在它的工作:)

+1

检查result.Length之前试图访问它的成员。此外,如果您调试代码并将服务器端的异常添加到问题中会更好。 –

回答

1

你可以只发送整个模型

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); 
} 
+0

我仍然收到错误...请参阅我的更新! – bullprog

+0

@bullprog遵循错误消息中提供的明确说明 – Nkosi

+0

@bullprog检查出https://stackoverflow.com/a/10196549/5233410 – Nkosi

2

你打电话PutAsJsonAsync,但是当你期望一个代表json的字符串时,你传递一个非json字符串作为你的数据参数。

从文档:

发送PUT请求作为一个异步操作以指定的URI与序列化为JSON给定值。

为了使它工作,改用PutAsync

+0

现在告诉该字符串不能转换为http.content。 – bullprog

+0

@bullprog - 你应该可以在头文件中设置'content-type',使用'application/x-www-form-urlencoded'并以'='作为字符串值的前缀。请参阅[文档](https://msdn.microsoft.com/en-us/library/hh138124(v = vs.118).aspx)。 – Igor