2016-03-07, 22:29
  #1
Medlem
TexasSwedes avatar
Nu behöver jag lite hjälp, eller i alla fall pekare till hur jag ska göra.

Jag har i Visual Studio 2015 en HTML-sida med ett formulär. Formuläret har ett par text-fält (bladn annat en epost-adress), två file upload controls och en submit-knapp, allt är normal HTML (med Bootstrap och lite jQuery för att sätta en disable på submit-knappen om inte alla fält är korrekta).


Jag har sedan en C#-controller som anropas när webformuläret skickas till servern. Controllern läser in värdena i input-fälten, sparar ner de uppladdade filerna lokalt och skapar sedan ett nytt email där de uppladdade filerna bifogas. Detta email skickas till den adress som angetts i webbformuläret.


Allt fungerar bra, mailet skcikas och jag får texten "Thank you" tillbaka i webbläsaren.
Frågan är nu hur jag får webbläsaren att gå till en specifik webbsida istället för att visa texten.

Jag har provat att skicka en sträng med HTML-kod, men det kommer ändå bara över som text, man ser HTML-koden i klartext.
Antingen om det finns ett sätt att ange att HttpResponseMessage är HTML-kod (nån header som innehåller content-type kanske?) eller om det finns nån metod som returnerar en redirect till en existerande webbsida... Förslag?
Citera
2016-03-07, 22:58
  #2
Medlem
Ja, det går att lösa. Men jag skulle inte säga att det är korrekt. Det är ju trots allt en Web Api du anropar, den bör inte anta något om vad klienten vill göra med svaret.

Det korrekta vore att sköta redirect på klientsidan.
Citera
2016-03-08, 12:38
  #3
Medlem
Använder du MVC eller EF eller liknande ramverk?
Hur gör du när du visar en HTML sida vanligt?
Utifall du använder dig utav MVC så är ju själva HTML sidan en View, och då istället för följande stycke:
[PHP]
return new HttpResponseMessage()
{
Content = new StringContent("Thank you.")
};
[/PHP]

Så vill du köra en return View() på den View:n som motsvarar sidan du vill visa.
Citera
2016-03-08, 20:29
  #4
Medlem
TexasSwedes avatar
Tack för hjälpen/förklaringarna.

Jag löste det genom att returnera JSON till den anropande sidan och låta redirect ske där.

Min C#-kod ändrades enligt följande.

Ny kod
Kod:
    public class jsonReturnData
    {
        public bool status;
        public string message;
    }

Ändrad kod
Från
Kod:
public async Task<HttpResponseMessage> PostFile()
till
Kod:
public async Task<jsonReturnData> PostFile()

Och från
Kod:
return new HttpResponseMessage()
{
    Content = new StringContent("Thank you.")
};
till
Kod:
jsonReturnData json = new jsonReturnData();
json.status = true;
json.message = "Sent email to " + emaildata.sendTo;
return json;

Vet inte om det är det rätta/bästa sättet, men det fungerar för mig nu. :-)
Citera
2016-03-08, 21:16
  #5
Medlem
Citat:
Ursprungligen postat av TexasSwede
Jag löste det genom att returnera JSON till den anropande sidan och låta redirect ske där.
[...]
Vet inte om det är det rätta/bästa sättet, men det fungerar för mig nu. :-)
Tillvägagångssättet är iaf det korrekta, som sagt. Är det en ApiController du anropar så ska den inte bry sig om vad den anropande parten gör med datan den returnerar.

Det finns naturligtvis andra sätt, men bra att du valde att upprätta någon form av "kontrakt" genom jsonReturnData (klassnamn med litet "J" ).

Blir nyfiken, varför valde du en API framför en mvc-lösning?
Citera
2016-03-10, 18:49
  #6
Medlem
TexasSwedes avatar
Citat:
Ursprungligen postat av Blippster
Det finns naturligtvis andra sätt, men bra att du valde att upprätta någon form av "kontrakt" genom jsonReturnData (klassnamn med litet "J" ).

Oops!

Citat:
Ursprungligen postat av Blippster
Blir nyfiken, varför valde du en API framför en mvc-lösning?
Är inte helt säker, jag är helt ny när det gäller C# och .Net, har jobbat i många år med andra plattformar (från IBM) där det inte finns MVC.

Har du lust att förklara skillnaden lite för mig, på nåt enkelt sätt?
Citera
2016-03-10, 22:09
  #7
Medlem
Citat:
Ursprungligen postat av TexasSwede
Är inte helt säker, jag är helt ny när det gäller C# och .Net, har jobbat i många år med andra plattformar (från IBM) där det inte finns MVC.

Har du lust att förklara skillnaden lite för mig, på nåt enkelt sätt?
Skillnaden är egentligen väldigt liten (Microsoft har faktiskt slagit samman dem nu med Mvc 6). Båda tillämpar också mvc-arkitektur.

Kort förklarat: dels tillämpar Web Api en annan default-routing, dels ärver alla controllers från ApiController. I en mvc-lösning så ärver de från Controller. En ApiController är väldigt effektiv för att hantera requests och returnera serialiserad data som svar, en Controller returnerar istället vyer. Så i ditt fall (låter det som) hade en Controller varit att föredra.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in