2015-01-25 6 views
0

я получаю плохой ошибка запроса каждый раз, когда я бегу эту строку кода:MS Azure - Bad Request 400

List<Account> accounts = await App.accountTable.Where(account => account.EmailAddress == email).ToListAsync(); 

Вот сообщение об ошибке:

A first chance exception of type 'Microsoft.WindowsAzure.MobileServices.MobileServiceInvalidOperationException' occurred in mscorlib.dll 
Microsoft.WindowsAzure.MobileServices.MobileServiceInvalidOperationException: The request could not be completed. (Bad Request) 
    at Microsoft.WindowsAzure.MobileServices.MobileServiceHttpClient.<ThrowInvalidResponse>d__18.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 Microsoft.WindowsAzure.MobileServices.MobileServiceHttpClient.<SendRequestAsync>d__1d.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 Microsoft.WindowsAzure.MobileServices.MobileServiceHttpClient.<RequestAsync>d__4.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 Microsoft.WindowsAzure.MobileServices.MobileServiceTable.<ReadAsync>d__b.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 Microsoft.WindowsAzure.MobileServices.MobileServiceTable.<ReadAsync>d__4.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 Microsoft.WindowsAzure.MobileServices.Query.MobileServiceTableQueryProvider.<Execute>d__8`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 Microsoft.WindowsAzure.MobileServices.Query.MobileServiceTableQueryProvider.<Execute>d__3`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 Microsoft.WindowsAzure.MobileServices.MobileServiceTableQuery`1.<ToListAsync>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`1.GetResult() 
    at eventsphere.Utilities.ValidationUtility.<CheckEmailExistsError>d__2.MoveNext() 

Однако у меня есть другая линия которая в основном то же самое, и это работает прекрасно:

List<Account> accounts = await App.accountTable.Where(account => account.Username == username).ToListAsync(); 

Я буквально невежественны, почему одна линия даст мне ошибку а другой не будет, поскольку все, что изменилось, - это свойство таблицы Account, которую я запрашиваю.

счета Структура таблицы: (Не дай мне опубликовать изображение, потому что у меня не хватает репутации)

CREATE TABLE [eventsphere].[Accounts] (
    [Id]   NVARCHAR (128)  DEFAULT (newid()) NOT NULL, 
    [AccountId] INT    IDENTITY (1, 1) NOT NULL, 
    [Username]  NVARCHAR (MAX)  NULL, 
    [EmailAddress] NVARCHAR (MAX)  NULL, 
    [Password]  NVARCHAR (MAX)  NULL, 
    [IsBusiness] BIT    NOT NULL, 
    [User_Id]  NVARCHAR (128)  NULL, 
    [Business_Id] NVARCHAR (128)  NULL, 
    [Version]  ROWVERSION   NOT NULL, 
    [CreatedAt] DATETIMEOFFSET (7) DEFAULT (sysutcdatetime()) NOT NULL, 
    [UpdatedAt] DATETIMEOFFSET (7) NULL, 
    [Deleted]  BIT    NOT NULL, 
    CONSTRAINT [PK_eventsphere.Accounts] PRIMARY KEY NONCLUSTERED ([Id] ASC), 
    CONSTRAINT [FK_eventsphere.Accounts_eventsphere.Businesses_Business_Id] FOREIGN KEY ([Business_Id]) REFERENCES [eventsphere].[Businesses] ([Id]), 
    CONSTRAINT [FK_eventsphere.Accounts_eventsphere.Users_User_Id] FOREIGN KEY ([User_Id]) REFERENCES [eventsphere].[Users] ([Id]) 
); 

Любой вход будет оценен по достоинству! Заранее спасибо :)

+0

Вы можете проверить, есть ли в вашей таблице столбец электронной почты? также, разместите свою структуру таблицы в вопросе. –

+0

Отредактировано мое сообщение, так что включена структура таблицы учетных записей –

+0

В обнаруженном MobileServiceInvalidOperationException есть свойство «Response», которое содержит ответ от службы. Можете ли вы просмотреть контент ответа, чтобы узнать, есть ли у него какая-либо информация о том, почему сервер считал, что запрос является плохим? – carlosfigueira

ответ

0

Что делает ваш клиентский EmailAddress свойство выглядеть? В какой-то момент он становится более низким - есть ли у вас какие-либо атрибуты в вашей модели клиента?

Причина, по которой «Имя пользователя» и «имя пользователя» работают, заключается в том, что сервер допускает как верхний, так и нижний регистр с первой буквой свойств. Например, «emailAddress» должен работать.

+0

Привет, мы выяснили, что проблема оказалась, что веб-сайт Api не синхронизировался со столами, следовательно, был неудачным. Глупая ошибка с нашей стороны никогда даже не задумывалась об этом (я новичок в Azure). Спасибо за ответ! –

0

(не могу комментировать, пока у меня 10 репутации, поэтому я отправляю это как ответ ..)

Вот запрос запрос, который генерируется и отправляется в локальную копию нашего база данных:

http://localhost:59737/tables/Account?$filter=(emailaddress%20eq%20%27email%40test.com%27)  

, который возвращает этот объект (я думаю, что свойство «сообщение» это все, что важно):

{"message":"The query specified in the URI is not valid. Could not find a property named 'emailaddress' on type 'eventsphereService.DataObjects.Account'.","exceptionMessage":"Could not find a property named 'emailaddress' on type 'eventsphereService.DataObjects.Account'.","exceptionType":"Microsoft.Data.OData.ODataException","stackTrace":" at Microsoft.Data.OData.Query.EndPathBinder.GeneratePropertyAccessQueryForOpenType(EndPathToken endPathToken, SingleValueNode parentNode)\r\n at Microsoft.Data.OData.Query.EndPathBinder.BindEndPath(EndPathToken endPathToken, BindingState state)\r\n at Microsoft.Data.OData.Query.MetadataBinder.BindEndPath(EndPathToken endPathToken)\r\n at Microsoft.Data.OData.Query.MetadataBinder.Bind(QueryToken token)\r\n at Microsoft.Data.OData.Query.BinaryOperatorBinder.GetOperandFromToken(BinaryOperatorKind operatorKind, QueryToken queryToken)\r\n at Microsoft.Data.OData.Query.BinaryOperatorBinder.BindBinaryOperator(BinaryOperatorToken binaryOperatorToken)\r\n at Microsoft.Data.OData.Query.MetadataBinder.BindBinaryOperator(BinaryOperatorToken binaryOperatorToken)\r\n at Microsoft.Data.OData.Query.MetadataBinder.Bind(QueryToken token)\r\n at Microsoft.Data.OData.Query.FilterBinder.BindFilter(QueryToken filter)\r\n at Microsoft.Data.OData.Query.ODataUriParser.ParseFilterImplementation(String filter, IEdmType elementType, IEdmEntitySet entitySet)\r\n at System.Web.Http.OData.Query.FilterQueryOption.get_FilterClause()\r\n at System.Web.Http.OData.Query.Validators.FilterQueryValidator.Validate(FilterQueryOption filterQueryOption, ODataValidationSettings settings)\r\n at System.Web.Http.OData.Query.FilterQueryOption.Validate(ODataValidationSettings validationSettings)\r\n at System.Web.Http.OData.Query.Validators.ODataQueryValidator.Validate(ODataQueryOptions options, ODataValidationSettings validationSettings)\r\n at System.Web.Http.OData.Query.ODataQueryOptions.Validate(ODataValidationSettings validationSettings)\r\n at System.Web.Http.OData.EnableQueryAttribute.ValidateQuery(HttpRequestMessage request, ODataQueryOptions queryOptions)\r\n at System.Web.Http.OData.EnableQueryAttribute.ExecuteQuery(Object response, HttpRequestMessage request, HttpActionDescriptor actionDescriptor)\r\n at System.Web.Http.OData.EnableQueryAttribute.OnActionExecuted(HttpActionExecutedContext actionExecutedContext)"} 

однако при модификации (нами, в браузере) следующим образом:

http://localhost:59737/tables/Account?$filter=(EmailAddress%20eq%20%27email%40test.com%27) 

оно возвращает некоторые данные.

При запросе поля имени пользователя «Имя пользователя» и «имя пользователя» возвращают данные.

учетная запись DataObject определяется как:

public class Account : EntityData 
{ 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int AccountId { get; set; } 
    public string Username { get; set; } 
    [DataType(DataType.EmailAddress)] 
    public string EmailAddress { get; set; } 
    public string Password { get; set; } 
    public bool IsBusiness { get; set; } 

    public string User_Id { get; set; } 
    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    [ForeignKey("User_Id")] 
    [Association("UserIdAssociation", "UserId", "Id")] 
    [Column(Order = 1)] 
    public virtual User User { get; set; } 

    public string Business_Id { get; set; } 
    [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    [ForeignKey("Business_Id")] 
    [Association("BusinessIdAssociation", "BusinessId", "Id")] 
    public virtual Business Business { get; set; } 
}