Loading...
a.angelov avatar a.angelov 1316 Точки

[Homework] Web-Services-SOA-and-REST

Здравейте,

решавам задачите от миналия курс и имам известен проблем на четвърта задача - Rest client:

Правейки го като Наков във видеото:

using (WebClient client = new WebClient())
{
        var response = client.UploadString("http://localhost:60759/calcdistance?x1=0&y1=0&x2=2&y2=2", "POST");
        Console.WriteLine(response);
}

всичко е ок и работи, обаче ползвайки RestSharp библиотеката:

var client = new RestClient("http://localhost:60759");
var request = new RestRequest("calcdistance", Method.POST);
request.AddParameter("x1", 0);
request.AddParameter("y1", 0);
request.AddParameter("x2", 2);
request.AddParameter("y2", 2);

var response = client.Execute(request);
Console.WriteLine(response.Content);

ми връща следния респонс:

{"Message":"No HTTP resource was found that matches the request URI 'http://localhost:60759/calcdist
ance'.","MessageDetail":"No action was found on the controller 'Calculator' that matches the request
."}

Явно не намира ресурса, обаче не мога да си обясня защо..., IIS сървъра работи и услугата е достъпна, както през WebClient-а, така и през Postman...

Ако някой може да даде идея за причината... 

Тагове:
0
C# Web Services & Cloud 05/08/2015 13:44:40
RoYaL avatar RoYaL Trainer 6849 Точки

Защото ги добавяш в POST REQUEST body-то, а ресурсът ти не разчита на Post Request параметри, а на GET такива.

Ако имаш

public ActionResult SomeMethod(int x1, int x2, int x3, int x4)

{

    //

}

Това автоматично взима x1,x2,x3,x4 като параметри от GET Request-а, вместо да ги вземе от Body-то, тъй като WebApi 2 не поддържа multiple parameters. Трябва или да си направишм етода да сериализира body-то до някакъв обект, който има същите пропъртита (x1, x2...) или да направиш малко брутален хак, който съм описал как става в StackOverlow - http://stackoverflow.com/questions/31719548/call-post-method-having-multiple-parameters-in-cshtml-file/31719829#31719829

0
a.angelov avatar a.angelov 1316 Точки

Метода ми ги сериализира до обект Point с координати х и у :)

public double CalcDistance(int x1, int y1, int x2, int y2)
        {
            Point startPoint = new Point {X = x1, Y = y1 };
            Point endPoint = new Point { X = x2, Y = y2 };

            return Math.Sqrt(
                Math.Pow(endPoint.X - startPoint.X, 2) +
                Math.Pow(endPoint.Y - startPoint.Y, 2));
        }

 

0
05/08/2015 17:04:44
RoYaL avatar RoYaL Trainer 6849 Точки

Да, но то не знае, че трябва да ти хитне този метод, защото този метод може да бъде хитнат, само ако в ГЕТ заявката има тези параметри.

Ако методът ти е

public double CalcDistance([FromBody]Point) {

}

Тогава ще стане, но само за единия пойнт. Ще ти трябва структура от данни, която държи и 4те координата. Може да е JObject ккато съм показал в примера в StackOverflow. Иначе то не се усеща въобще, че трябва да извика този метод, така че въобще не стига до твоята сериализация.

0
a.angelov avatar a.angelov 1316 Точки

Мерси, ще го помъча по-късно довечера yes

0
a.angelov avatar a.angelov 1316 Точки

Направих го така:

public class CalculatorController : ApiController
    {
        [HttpPost]
        [Route("calcdistance")]
        public double CalcDistance(FormDataCollection data)
        {
            int x1 = int.Parse(data.Get("x1"));
            int y1 = int.Parse(data.Get("y1"));
            int x2 = int.Parse(data.Get("x2"));
            int y2 = int.Parse(data.Get("y2"));
            Point startPoint = new Point { X = x1, Y = y1 };
            Point endPoint = new Point { X = x2, Y = y2 };

            return Math.Sqrt(
                Math.Pow(endPoint.X - startPoint.X, 2) +
                Math.Pow(endPoint.Y - startPoint.Y, 2));
        }
    }

 

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.