«System.InvalidOperationException: неверный формат запроса: multipart / form-data» при публикации изображения с iphone на веб-сервис .NET - PullRequest
7 голосов
/ 15 января 2010

Я пытаюсь опубликовать изображение из приложения iphone на веб-сервис .Net, и я сталкиваюсь с этой ошибкой. Я уже обновил свой web.config в соответствии с этой статьей kb , и я могу успешно публиковать методы, которые принимают строки в качестве параметров. Моя проблема пытается опубликовать данные с изображением. Я пытался опубликовать таким образом и таким образом , но в обоих случаях я получаю одну и ту же ошибку:


System.InvalidOperationException: Request format is invalid: multipart/form-data; charset=utf-8; boundary=0xKhTmLbOuNdArY.
   at System.Web.Services.Protocols.HttpServerProtocol.ReadParameters()
   at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()

Вот моя подпись веб-сервиса:


[WebMethod]
public XmlDocument UploadImageToServer(string usertoken, byte[] image)
{ 
   //stuff happens in here
}

.. и вот моя последняя попытка:


- (void)sendImageToServer:(NSURL *)serivceURL withUserToken:(NSString *)usertoken
{
 NSData *imageData = UIImageJPEGRepresentation(self.selectedImage, 1.0f);

 ASIFormDataRequest *request = [[[ASIFormDataRequest alloc] initWithURL:serviceURL] autorelease];
 [request setPostValue:usertoken forKey:@"usertoken"];
 [request setData:imageData forKey:@"image"];
 [request setDelegate:self];
 [request startAsynchronous];

 NSLog(@"We set the request out!");

}

Кроме того, я увеличил максимальную длину запроса httpRuntime до 40 МБ (<httpRuntime maxRequestLength="40960"/>), чтобы убедиться, что проблема связана не с размером моего изображения, а с ошибкой.

Буду признателен за любую помощь.

-a

Ответы [ 3 ]

6 голосов
/ 23 ноября 2010

Я получил это для работы, переместив их в строки в web.config:

<add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

Они были размещены в нижней части раздела <system.webServer><handlers> в web.config, но, поскольку я переместил их в начало, похоже, что они работают!

2 голосов
/ 12 октября 2010

Вы пытаетесь прочитать двоичные данные в качестве входных параметров. Вместо этого вам нужно прочитать параметры из Context.Request. Другими словами, удалите userToken и изображение как параметры запроса. Вместо этого к userToken следует обращаться через Context.Request ["userToken"], а изображение должно быть доступно через Context.Request.PostedFiles ["image"]: http://www.rahulsingla.com/blog/2010/07/ext-net-ajax-file-upload-using-web-service

0 голосов
/ 12 декабря 2016

Спасибо r_honey,

Дополнительный код

[WebMethod]
    public string UploadFile()
    {
    //if you take parameter in UploadFile() like UploadFile(string cropName, .....), then give error System.InvalidOperationException: Request format is invalid: multipart/form-data
        string ret = "";
        HttpRequest request = this.Context.Request;
        HttpPostedFile file = request.Files["upload"];
        string FileName = file.FileName;
        string cropName = request["cropName"];

        string ext = Path.GetExtension(FileName).ToLower();

        if (!(ext == ".png" || ext == ".jpg" || ext == ".jpeg"))// for only images file
        {
           ret = string.Format("File extension {0} not allowed.", ext);

            return ret;
        }

        if (FileName != "")
        {
            string path = HttpRuntime.BinDirectory;

            string UUID = System.Guid.NewGuid().ToString();
            string filepath = path + "upload/" + UUID + ".jpg";
            file.SaveAs(filepath);
            // add your code if any
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...