I have an web app that use webapi for loading / saving data All used to work ok/ Today I found that there is an updated to ASP.NET MVC / webapi, and I installed the update But after that POSTing data with jquery no longer works. I made no change either in client code or in webapi controller.
My typical POSt statement looks as below:
showProgress(true, self.PanelID(), 'Saving...')
j$.ajax({
type: "POST",
url: uri,
data: dataObj,
error: function (jqXHR, status, error) {
showProgress(false);
GLOBAL.setMessage(self, 'Error saving ' + opType + '<br>' + error, true);
},
success: function (data, status, jqXHR) {
showProgress(false);
if (status === 'success') {
GLOBAL.setMessage(self, opType + " saved ok");
//....
The $.ajax code gets the following error
"An error has occurred." ExceptionMessage "This method or property is not supported after HttpRequest.Form, Files, InputStream, or BinaryRead has been invoked." ExceptionType "System.Web.HttpException" StackTrace at System.Web.HttpRequest.GetInputStream(Boolean persistEntityBody, Boolean disableMaxRequestLength) at System.Web.HttpRequestWrapper.GetBufferedInputStream() at System.Web.Http.WebHost.SeekableBufferedRequestStream..ctor(HttpRequestBase request) at System.Web.Http.WebHost.HttpControllerHandler.c__DisplayClass11.b__b() at System.Web.Http.WebHost.HttpControllerHandler.LazyStreamContent.get_StreamContent() at System.Web.Http.WebHost.HttpControllerHandler.LazyStreamContent.CreateContentReadStreamAsync() at System.Net.Http.HttpContent.ReadAsStreamAsync() at System.Net.Http.HttpContentExtensions.d__0`1.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() at System.Web.Http.ModelBinding.FormatterParameterBinding.d__0.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter.GetResult() at System.Web.Http.Controllers.HttpActionBinding.d__0.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter.GetResult() at System.Web.Http.Controllers.ActionFilterResult.d__2.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() at System.Web.Http.Filters.AuthorizationFilterAttribute.d__2.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() at System.Web.Http.Dispatcher.HttpControllerDispatcher.d__0.MoveNext()"
These are the nuget packages from my solution
package id="Microsoft.AspNet.Mvc" version="5.1.0" targetFramework="net45" package id="Microsoft.AspNet.Razor" version="3.1.0" targetFramework="net45" package id="Microsoft.AspNet.SignalR.Client" version="2.0.1" targetFramework="net45" package id="Microsoft.AspNet.Web.Optimization" version="1.1.2" targetFramework="net45" package id="Microsoft.AspNet.WebApi" version="5.1.0" targetFramework="net45" package id="Microsoft.AspNet.WebApi.Client" version="5.1.0" targetFramework="net45" package id="Microsoft.AspNet.WebApi.Core" version="5.1.0" targetFramework="net45" package id="Microsoft.AspNet.WebApi.HelpPage.VB" version="5.1.0" targetFramework="net45" package id="Microsoft.AspNet.WebApi.OData" version="5.1.0" targetFramework="net45" package id="Microsoft.AspNet.WebApi.WebHost" version="5.1.0" targetFramework="net45" package id="Microsoft.AspNet.WebPages" version="3.1.0" targetFramework="net45" package id="Microsoft.Bcl" version="1.1.6" targetFramework="net45" package id="Microsoft.Bcl.Build" version="1.0.13" targetFramework="net45" package id="Microsoft.Data.Edm" version="5.6.0" targetFramework="net45" package id="Microsoft.Data.OData" version="5.6.0" targetFramework="net45" package id="Microsoft.Net.Http" version="2.2.18" targetFramework="net45" package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45"
Does anyone knows what could be the problem? Any idea on how to fix it?
EDIT
Sample controller code:
Public Class ImportController Inherits ApiController Public Function SaveImportSession(sessid As string, entity As SIImportSessionDTO) As HttpResponseMessage Try InspectionData.SaveImportSession(sessid, entity) Dim response = Request.CreateResponse(HttpStatusCode.Accepted) Return response Catch ex As HttpResponseException Throw Catch ex As Exception Throw New HttpResponseException(Request.CreateResponse(Of String)(HttpStatusCode.InternalServerError, ex.Message)) End Try End Function
I'm using only attribute-based routes, and this is my webapi route config
Public Shared Sub Register(ByVal config As HttpConfiguration) config.MapHttpAttributeRoutes() config.Routes.MapHttpRoute( _ name:="DefaultApi", _ routeTemplate:="api/{controller}/{id}", _ defaults:=New With {.id = RouteParameter.Optional} _
The problem, my server side code is not even reached, something else on the pipeline throw the exception
Thanks