user2373505
user2373505

Reputation: 25

How to navigate in ServiceStatck Razor pages + ServiceStack api?

In my webapp

webApp
\Views
\Views\School
\Views\School\School.cshtml
\Views\School\Schools.cshtml

In Request and Response classes:

[Route("/v1/school", Verbs = "POST")]  
[DefaultView("School")]
public class SchoolAddRequest : School, IReturn<SchoolResponse>
{

}

public class SchoolResponse
{
    public School School { get; set; }
    public SchoolResponse()
    {
        ResponseStatus = new ResponseStatus();
        Schools = new List<School>();
    }
    public List<School> Schools { get; set; }        
    public ResponseStatus ResponseStatus { get; set; }
}

In SchoolService.cs:

[DefaultView("School")]
public class SchoolService: Service
{       
    public SchoolResponse Post(SchoolAddRequest request)
    {
        var sch = new School {Id = "10"};
        return new SchoolResponse {School = sch, ResponseStatus = new ResponseStatus()};
    }
}

In school.cshtml:

@inherits ViewPage<Test.Core.Services.SchoolResponse>
@{
    Layout = "_Layout";
}
<form action="/v1/School" method="POST">
   @Html.Label("Name: ")  @Html.TextBox("Name")
   @Html.Label("Address: ") @Html.TextBox("Address")
   <button type="submit">Save</button>
</form>

@if (@Model.School != null)
{
  @Html.Label("ID: ")  @Model.School.Id
}

On the browser:
This is suppose to work but it is not, i get a blank page

http://test/school/ 

This works:

http://test/views/school/

On hitting the 'save' btn the required response is returned but the url on the browser is :

http://test/v1/School

I was expecting it to be:

http://test/School 

How can i get the url to work right.? Shouldn't it be http://test/School on request and response.

Upvotes: 1

Views: 163

Answers (1)

Ermias Y
Ermias Y

Reputation: 263

http://test/school/ is not returning anything because you don't have a request DTO and a corresponding 'Get' service implemented for the route.

What you need is a request DTO:

[Route("/school", Verbs = "GET")]  
public class GetSchool : IReturn<SchoolResponse>
{

}

and the service...

public SchoolResponse Get(GetSchool request)
    {
        var sch = new School {Id = "10"};
        return new SchoolResponse {School = sch, ResponseStatus = new ResponseStatus()};
    }

When you hit 'Save', a 'POST' request will be made to the server through the route 'v1/school' because the form tag you specified has:

<form action="/v1/School" method="POST">

Hope this helps.

Upvotes: 1

Related Questions