Využij akce až 30 % zdarma při nákupu e-learningu. Více informací. Zároveň je tento týden sleva až 80 % na e-learning týkající se C# .NET
Hledáme nového kolegu do redakce - 100% home office, 100% flexibilní pracovní doba. Více informací.
discount week 30 halloween

Diskuze: ASP.NET Core Web API + web na jednom serveri

Aktivity
Avatar
Tadeáš Burda
Brigádník
Avatar
Tadeáš Burda :30. dubna 16:17

Zdravim, mám otazku(pre niekoho možno triviálnu) ale mám urobebný backgend v .NET Core Web API a frontend klasika HTML+CSS a JS...Ak spustím API na pc a pak otvorim index.html tak stránka a API spolu komunikuju v poriadku, ale ak nahrajem API a stranku na server(Forpsi - win) tak index.html sa nespusti, spusti sa len to API(skusal som GET a odpoveda to)...Normalne pouzivam MVC ale chcel by som striktne oddelit BE a FE takto a mat to zaroven na jednom severi ze ked tam niekto pride tak mu to spusti uvodnu stranku(index.html) a potom to bude komunikovat AJAXom a tak nieco

Zkusil jsem: Nieco som googlil ale nasiel som len stare veci, alebo take ze mam vitvorit wwwroot a tam dat index.html a nastavit staticfile v Startup.cs nech to spusti ten...Bolo to strasne stare este core 2.1 a doslo mi to take divne, lebo sa tam nacitali vsetki tie staticke files...Viem ze sa da pouzit Core API a Angular napr takze urcite to ide, len neviem presne ako sa nastavi v Sartup aby pri volani na server poslal index.html ako privi a pak to rozdelovalo mezi pozadavkem na API a stahovanim HTML suboru

Chci docílit: AKo som povedal chcem oddelit BE a FE...Je to preto ze niekedy mam FE ako sablonu v html uz hotovu, ale pouzivam MVC tak to prepisujem do cshtml a celkovo to vzdi previazem az moc z BE a .NET C#...Chcel by som to vivijat tak ze spravim API a proti nemu pak budu psat FE, len ked to dam na ten server tak to neviem nastavit..

PS: AK to je uplna blbost, tak aj zataki koment budem vdacni :) Len vecinou ked mi pride niaka ponuka nikdyu to neni ASP. NEt MVC vzdi len REST API a naiky FE fraemwork, tak asi sa to roby takto

 
Odpovědět
30. dubna 16:17
Avatar
Radek Veverka
Redaktor
Avatar
Odpovídá na Tadeáš Burda
Radek Veverka:30. dubna 17:19

Ahoj, pošli kód metody Configure v souboru Startup.cs.

 
Nahoru Odpovědět
30. dubna 17:19
Avatar
Tadeáš Burda
Brigádník
Avatar
Odpovídá na Radek Veverka
Tadeáš Burda :30. dubna 17:33

Caw, je to len ten defaultni co ti vygeneruje VS...Nemam hotovi projekt, len sem to chcel odskusat nez sa doteho pustim. Je to tento:

public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {

            services.AddControllers();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseHttpsRedirection();

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
    }

Vlastne mam len toto defaultne API a index.html z buttonem co volal na to API abych to odskusal...Viem ze ked sem kupoval server tak tam byl index.html co sa spustal tak sem ho tam skusil pridat len ze ci to pujde...Neslo tak sem skusil dat do www zlozki ale taki nic...Pak mna napadlo do launchSettings.json nastavit applicationUrl jak https://web.com/index.html ale poto sem sa uz nedostal...Mozno app.endpoints zeby ale tam je len map na Controller alebo RazorPage....Staci mi len odpichnut :) Ja to googlil ale v MS dokumentacii bylo len vitvoreni API a skusani cez Postman, coz je len polka teho co potrebuju

 
Nahoru Odpovědět
30. dubna 17:33
Avatar
Tadeáš Burda
Brigádník
Avatar
Odpovídá na Radek Veverka
Tadeáš Burda :30. dubna 17:35

Kukal sem aj defaultny projekt VS kde to je rovno vigenerovane z Angularem/ Reactem, ale strukture teho projektu fakt nerozumim :D Fakt sem sa snazil, len proste nevim...Tak keby si vedel fakt diki

 
Nahoru Odpovědět
30. dubna 17:35
Avatar
Radek Veverka
Redaktor
Avatar
Odpovídá na Tadeáš Burda
Radek Veverka:30. dubna 17:47

Nevím jestli to správně chápu, ale asi chceš aby se index.html vrátil vždy, když pro zažádané URL neexistuje api endpoint?
V tom případě budeš potřebovat:

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers();
    endpoints.MapFallbackToFile("index.html");
});

MapFallbackToFile zajistí, že se vrátí index.html, pokud se url nepodařilo namapovat na žádný api endpoint, má to tedy nejnižší prioritu.

 
Nahoru Odpovědět
30. dubna 17:47
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Tadeáš Burda
Brigádník
Avatar
Odpovídá na Radek Veverka
Tadeáš Burda :30. dubna 18:05

Pokusim sa to vysvetlit lespie: Chcem mat BE(to API) a FE(niaka Bootrat sablona) na serveri...Ked niekto pride na pmoju stranku ma sa vrati index.html + teda maju fungovat aj odkazy tipu www.example.com/contactus.html a pod...Zaroven ale ma fungovat aj to ze ked vtom index.html budem mat JS z niakym volanim napr www.example.com/…leController tak aj to ma ist....Teraz viem bud na ten server dat len API a tam sa defaultne vola controllers alebo len tie staticke html subory kde sa vola ten index.html lebo to tak je asi nastavene(ked tam nic ine neni, ziadna .net cor appka)...Ja potrebujem asi nastavit v startup nieco take ze ak nenajde ten kontrolelr, hlada to v statickich suboroch a teda ak pride niekto na www.example.com tak vrati ten index.html....Sorry ak to visvetlujem fakt bolbo :D Len aj ten project co mi to vigenereju ze .NET API + React, tak ked som nato pozeral tak API a React su v jednom projekte...Ked to spustim tak mi to hend hodi homepage a ten react tam ma index.html...Kod tam je takito:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseSpaStaticFiles();

            app.UseRouting();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller}/{action=Index}/{id?}");
            });

            app.UseSpa(spa =>
            {
                spa.Options.SourcePath = "ClientApp";

                if (env.IsDevelopment())
                {
                    spa.UseReactDevelopmentServer(npmScript: "start");
                }
            });
        }
 
Nahoru Odpovědět
30. dubna 18:05
Avatar
Tadeáš Burda
Brigádník
Avatar
Odpovídá na Radek Veverka
Tadeáš Burda :30. dubna 18:07

No len ja nemam SPA apku len sablonu zo statickima HTML-kama...Idem skusit to co si mi poslal :) Ja len chcel vedet ako sa to spravne/ v praxi roby ked sa spaja BE a FE v .NET Core... Ked mam ASP.NET Core MVC alebo RazorPage dojde mi to take jak full-stack, tak preto bich to chcel spravit stim API, potom bich si nekomu mohel nechat spravit FE, ja si spravime BE a ked mi to posle len to spolu niak nahrajem na server..TO je moj ciel

 
Nahoru Odpovědět
30. dubna 18:07
Avatar
Radek Veverka
Redaktor
Avatar
Odpovídá na Tadeáš Burda
Radek Veverka:30. dubna 18:20

Chápu. Ale nevím co máš za server, jak je nastavený... Jaktože vůbec vrací html stránky, když ti nejede .net core apka? To tam je ještě nějaký proxy Apache/nginx server?

Pokud chceš servírovat statické soubory, tak přidej ještě app.UseStaticFiles(); před app.UseRouting(). To ti api nerozbije - pokud se nenalezne soubor, spustí se routing do tvého api. Potom když použiješ ten MapFallbackToFile("index.html") tak se ti navíc vrátí index v případě neexistujícího endpointu.

Budeš mít server co je tedy primárně API, jen pomocí UseStaticFiles nastavíš navíc posílání souborů html, css a js (obsah wwwroot). Toť vše co potřebuješ. HTML, CSS i JS můžeš psát zvlášť a volat api.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět
30. dubna 18:20
Avatar
Tadeáš Burda
Brigádník
Avatar
Odpovídá na Radek Veverka
Tadeáš Burda :30. dubna 18:38

To prve: Ja fakt neviem...Moja znalost konci pritem ze to nahrajem cez FTP do www direct :D O serveroch ja neviem fakt nic
To druhe: Fakt dakujem! Este len jednu otazku, ono sa to takto aj roby? jako v praxi... Zda sa mi to totiz v poslednej dobe logicke, to stakto striktne oddelit a nemopuzit MVC napr, ale ne na kazdy web zas treba pouzivat niaky big FE jak Angular a tak... Ja len ze ci nejdu skusat niaku slepu ulicku co v praxi pak nepouziju...Zatat mam zasebu 4 stranky a vsetko MVC/ full-satck...Chcel bych robyt uz prave len BE a šablony si kupovat a pak to prepajat.

 
Nahoru Odpovědět
30. dubna 18:38
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.