Consume Web API in same app from MVC Controller
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;
I'm writing an application that serves both Web API and a MVC content in .NET Core. From the MVC Controller I want to call the API's functions and receive the data that comes back. Is there a better way than using HttpClient
or similar things? Like instantiating the API's controller class in the MVC Controller? I can't just go new ApiController();
since it's depending on dependency injection, can I?
asp.net-core-mvc asp.net-core-webapi
add a comment |
I'm writing an application that serves both Web API and a MVC content in .NET Core. From the MVC Controller I want to call the API's functions and receive the data that comes back. Is there a better way than using HttpClient
or similar things? Like instantiating the API's controller class in the MVC Controller? I can't just go new ApiController();
since it's depending on dependency injection, can I?
asp.net-core-mvc asp.net-core-webapi
Duplicate: stackoverflow.com/questions/53322147/…
– Adrian K
Nov 15 '18 at 21:21
add a comment |
I'm writing an application that serves both Web API and a MVC content in .NET Core. From the MVC Controller I want to call the API's functions and receive the data that comes back. Is there a better way than using HttpClient
or similar things? Like instantiating the API's controller class in the MVC Controller? I can't just go new ApiController();
since it's depending on dependency injection, can I?
asp.net-core-mvc asp.net-core-webapi
I'm writing an application that serves both Web API and a MVC content in .NET Core. From the MVC Controller I want to call the API's functions and receive the data that comes back. Is there a better way than using HttpClient
or similar things? Like instantiating the API's controller class in the MVC Controller? I can't just go new ApiController();
since it's depending on dependency injection, can I?
asp.net-core-mvc asp.net-core-webapi
asp.net-core-mvc asp.net-core-webapi
edited Nov 15 '18 at 16:15
phuzi
4,80012036
4,80012036
asked Nov 15 '18 at 14:54
lennyylennyy
154119
154119
Duplicate: stackoverflow.com/questions/53322147/…
– Adrian K
Nov 15 '18 at 21:21
add a comment |
Duplicate: stackoverflow.com/questions/53322147/…
– Adrian K
Nov 15 '18 at 21:21
Duplicate: stackoverflow.com/questions/53322147/…
– Adrian K
Nov 15 '18 at 21:21
Duplicate: stackoverflow.com/questions/53322147/…
– Adrian K
Nov 15 '18 at 21:21
add a comment |
2 Answers
2
active
oldest
votes
"Like instantiating the API's controller class in the MVC Controller?"
No, that's not a good idea, and wouldn't really work anyway. You could make a HTTP request as you mentioned, but it's not that efficient if everything is already part of the application.
But if the functionality which actually gets the data is in a separate class, you could call the relevant method of that class and get the data directly - probably better to get it as a variable than as JSON anyway.
This all about your application design - the process of retrieving the data (e.g. from a database) should be functionally separate from the process of providing it to the user (e.g. as JSON via an API controller). So any code should be able to call the data retrieval functionality, not just the API.
Conceptually you might like to think of these as different layers of functionality. It's a common architectural model in software - a presentation layer, (optionally) a logic layer and a data layer.
how would I go about connecting to the database in that seperate class? Can I use DI there, too?
– lennyy
Nov 21 '18 at 14:24
I don't see any reason why not. Dependency injection is just a design pattern, it's not tied to any specific technology (such as web API)
– ADyson
Nov 21 '18 at 15:30
add a comment |
If your application has both ASP.Net MVC and Web API parts then best solution would be to put any functionality/business logic required to get any data in a service layer. Then both MVC and Web API can consume these directly rather than having to fire up a HttpClient (or similar).
To be honest, this is a good practice anyway whether you have both MVC and Web API, or just one. This would allow different API/MVC controllers to access the same data in the application without having to duplicate code.
Take a look at Onion Architecture which typically has 4 layers.
- UI (MVC/Web API),
- Service layer (for all business logic),
- Repository layer (for persistence of data) and,
- A common base layer for all your domain entities (POCOs that are common across all layers).
There's a good article over on C# Corner that explains Onion Architecture.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53322147%2fconsume-web-api-in-same-app-from-mvc-controller%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
"Like instantiating the API's controller class in the MVC Controller?"
No, that's not a good idea, and wouldn't really work anyway. You could make a HTTP request as you mentioned, but it's not that efficient if everything is already part of the application.
But if the functionality which actually gets the data is in a separate class, you could call the relevant method of that class and get the data directly - probably better to get it as a variable than as JSON anyway.
This all about your application design - the process of retrieving the data (e.g. from a database) should be functionally separate from the process of providing it to the user (e.g. as JSON via an API controller). So any code should be able to call the data retrieval functionality, not just the API.
Conceptually you might like to think of these as different layers of functionality. It's a common architectural model in software - a presentation layer, (optionally) a logic layer and a data layer.
how would I go about connecting to the database in that seperate class? Can I use DI there, too?
– lennyy
Nov 21 '18 at 14:24
I don't see any reason why not. Dependency injection is just a design pattern, it's not tied to any specific technology (such as web API)
– ADyson
Nov 21 '18 at 15:30
add a comment |
"Like instantiating the API's controller class in the MVC Controller?"
No, that's not a good idea, and wouldn't really work anyway. You could make a HTTP request as you mentioned, but it's not that efficient if everything is already part of the application.
But if the functionality which actually gets the data is in a separate class, you could call the relevant method of that class and get the data directly - probably better to get it as a variable than as JSON anyway.
This all about your application design - the process of retrieving the data (e.g. from a database) should be functionally separate from the process of providing it to the user (e.g. as JSON via an API controller). So any code should be able to call the data retrieval functionality, not just the API.
Conceptually you might like to think of these as different layers of functionality. It's a common architectural model in software - a presentation layer, (optionally) a logic layer and a data layer.
how would I go about connecting to the database in that seperate class? Can I use DI there, too?
– lennyy
Nov 21 '18 at 14:24
I don't see any reason why not. Dependency injection is just a design pattern, it's not tied to any specific technology (such as web API)
– ADyson
Nov 21 '18 at 15:30
add a comment |
"Like instantiating the API's controller class in the MVC Controller?"
No, that's not a good idea, and wouldn't really work anyway. You could make a HTTP request as you mentioned, but it's not that efficient if everything is already part of the application.
But if the functionality which actually gets the data is in a separate class, you could call the relevant method of that class and get the data directly - probably better to get it as a variable than as JSON anyway.
This all about your application design - the process of retrieving the data (e.g. from a database) should be functionally separate from the process of providing it to the user (e.g. as JSON via an API controller). So any code should be able to call the data retrieval functionality, not just the API.
Conceptually you might like to think of these as different layers of functionality. It's a common architectural model in software - a presentation layer, (optionally) a logic layer and a data layer.
"Like instantiating the API's controller class in the MVC Controller?"
No, that's not a good idea, and wouldn't really work anyway. You could make a HTTP request as you mentioned, but it's not that efficient if everything is already part of the application.
But if the functionality which actually gets the data is in a separate class, you could call the relevant method of that class and get the data directly - probably better to get it as a variable than as JSON anyway.
This all about your application design - the process of retrieving the data (e.g. from a database) should be functionally separate from the process of providing it to the user (e.g. as JSON via an API controller). So any code should be able to call the data retrieval functionality, not just the API.
Conceptually you might like to think of these as different layers of functionality. It's a common architectural model in software - a presentation layer, (optionally) a logic layer and a data layer.
edited Nov 15 '18 at 16:16
phuzi
4,80012036
4,80012036
answered Nov 15 '18 at 15:04
ADysonADyson
25.7k112746
25.7k112746
how would I go about connecting to the database in that seperate class? Can I use DI there, too?
– lennyy
Nov 21 '18 at 14:24
I don't see any reason why not. Dependency injection is just a design pattern, it's not tied to any specific technology (such as web API)
– ADyson
Nov 21 '18 at 15:30
add a comment |
how would I go about connecting to the database in that seperate class? Can I use DI there, too?
– lennyy
Nov 21 '18 at 14:24
I don't see any reason why not. Dependency injection is just a design pattern, it's not tied to any specific technology (such as web API)
– ADyson
Nov 21 '18 at 15:30
how would I go about connecting to the database in that seperate class? Can I use DI there, too?
– lennyy
Nov 21 '18 at 14:24
how would I go about connecting to the database in that seperate class? Can I use DI there, too?
– lennyy
Nov 21 '18 at 14:24
I don't see any reason why not. Dependency injection is just a design pattern, it's not tied to any specific technology (such as web API)
– ADyson
Nov 21 '18 at 15:30
I don't see any reason why not. Dependency injection is just a design pattern, it's not tied to any specific technology (such as web API)
– ADyson
Nov 21 '18 at 15:30
add a comment |
If your application has both ASP.Net MVC and Web API parts then best solution would be to put any functionality/business logic required to get any data in a service layer. Then both MVC and Web API can consume these directly rather than having to fire up a HttpClient (or similar).
To be honest, this is a good practice anyway whether you have both MVC and Web API, or just one. This would allow different API/MVC controllers to access the same data in the application without having to duplicate code.
Take a look at Onion Architecture which typically has 4 layers.
- UI (MVC/Web API),
- Service layer (for all business logic),
- Repository layer (for persistence of data) and,
- A common base layer for all your domain entities (POCOs that are common across all layers).
There's a good article over on C# Corner that explains Onion Architecture.
add a comment |
If your application has both ASP.Net MVC and Web API parts then best solution would be to put any functionality/business logic required to get any data in a service layer. Then both MVC and Web API can consume these directly rather than having to fire up a HttpClient (or similar).
To be honest, this is a good practice anyway whether you have both MVC and Web API, or just one. This would allow different API/MVC controllers to access the same data in the application without having to duplicate code.
Take a look at Onion Architecture which typically has 4 layers.
- UI (MVC/Web API),
- Service layer (for all business logic),
- Repository layer (for persistence of data) and,
- A common base layer for all your domain entities (POCOs that are common across all layers).
There's a good article over on C# Corner that explains Onion Architecture.
add a comment |
If your application has both ASP.Net MVC and Web API parts then best solution would be to put any functionality/business logic required to get any data in a service layer. Then both MVC and Web API can consume these directly rather than having to fire up a HttpClient (or similar).
To be honest, this is a good practice anyway whether you have both MVC and Web API, or just one. This would allow different API/MVC controllers to access the same data in the application without having to duplicate code.
Take a look at Onion Architecture which typically has 4 layers.
- UI (MVC/Web API),
- Service layer (for all business logic),
- Repository layer (for persistence of data) and,
- A common base layer for all your domain entities (POCOs that are common across all layers).
There's a good article over on C# Corner that explains Onion Architecture.
If your application has both ASP.Net MVC and Web API parts then best solution would be to put any functionality/business logic required to get any data in a service layer. Then both MVC and Web API can consume these directly rather than having to fire up a HttpClient (or similar).
To be honest, this is a good practice anyway whether you have both MVC and Web API, or just one. This would allow different API/MVC controllers to access the same data in the application without having to duplicate code.
Take a look at Onion Architecture which typically has 4 layers.
- UI (MVC/Web API),
- Service layer (for all business logic),
- Repository layer (for persistence of data) and,
- A common base layer for all your domain entities (POCOs that are common across all layers).
There's a good article over on C# Corner that explains Onion Architecture.
edited Nov 15 '18 at 15:10
answered Nov 15 '18 at 15:03
phuziphuzi
4,80012036
4,80012036
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53322147%2fconsume-web-api-in-same-app-from-mvc-controller%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Duplicate: stackoverflow.com/questions/53322147/…
– Adrian K
Nov 15 '18 at 21:21