none
Web API. Как проверить обработчик GET RRS feed

  • Вопрос

  • Здравствуйте!
    Помогите пожалуйста с таким вопросом:

    Есть контроллер:


    public class SMSController : ApiController
    {
    public void Get(MySMS singleSMS)
    {
    SMS_Repository.Add(singleSMS);
    }


    и метод записи в БД:

    public static void Add(MySMS singleSMS)
    {
    DataClasses1DataContext db = new DataClasses1DataContext();
    SimpleSMS newSMS = new SimpleSMS();
    newSMS.Name = singleSMS.Name;
    newSMS.Text = singleSMS.Text;
    newSMS.FromNumber = singleSMS.FromNumber;
    newSMS.ToNumber = singleSMS.ToNumber;

    db.SimpleSMS.InsertOnSubmit(newSMS);
    db.SubmitChanges();
    }

    Подскажите, как можно проверить, записываются ли данные в базу и по каким правилам эти данные передать?

    Например,
    localhost:xxxxx/api/sms?Name=yyy&Text=zzz

    Не работает. Выдаёт


    <Error>
    <Message>An error has occurred.</Message>
    <ExceptionMessage>
    Ссылка на объект не указывает на экземпляр объекта.
    </ExceptionMessage>
    <ExceptionType>System.NullReferenceException</ExceptionType>
    <StackTrace>
    в sms.Models.SMS_Repository.Add(MySMS singleSMS) в c:\Users\Incognito\Documents\Visual Studio 2012\Projects\sms\sms\Models\SMS_Repository.cs:строка 36 в sms.Controllers.SMSController.Get(MySMS singleSMS) в c:\Users\Incognito\Documents\Visual Studio 2012\Projects\sms\sms\Controllers\SMSController.cs:строка 25 в lambda_method(Closure , Object , Object[] ) в System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClassf.<GetExecutor>b__9(Object instance, Object[] methodParameters) в System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments) в System.Web.Http.Controllers.ReflectedHttpActionDescriptor.<>c__DisplayClass5.<ExecuteAsync>b__4() в System.Threading.Tasks.TaskHelpers.RunSynchronously[TResult](Func`1 func, CancellationToken cancellationToken)
    </StackTrace>
    </Error>

    Заранее спасибо!
    • Изменено ASalihov 12 июня 2013 г. 12:09
    12 июня 2013 г. 12:08

Ответы

  • Тут у Вас два варианта: или объект SMS_Repository есть null, и при вызове метода Add выбрасывается исключение, или singleSMS пустой, так как не срабатывает привязка данных по умолчанию. Но судя по тому, что вы привели привязка должна сработать. Ещё раз посмотрите в отладчик и скажите какой из них является null.
    13 июня 2013 г. 5:57
    Модератор
  • WebApi приспособлен к стандартной схеме использования HTTP-методов. Т.е. создание новых объектов нужно делать через POST, отправляя данные в теле запроса.

    В вашем случае подойдет обычный MVC (не web-api) контроллер, в нем биндер корректно подтянет поля из get-параметров.

    13 июня 2013 г. 17:28

Все ответы